У меня есть вопрос о SQL, который может быть основным некоторым, но смущает меня.
Вот пример имен столбцов для таблицы 'Person': PersonalID, FirstName, LastName, Автомобиль, HairColour, FavDrink, FavFood
Скажем, то, что я ввел строку:
121312, Rayna, Pieterson, BMW123d, Brown, ПУСТОЙ УКАЗАТЕЛЬ, ПУСТОЙ УКАЗАТЕЛЬ
Теперь я хочу обновить значения для этого человека, но только если новое значение не является нулевым, Обновление:
121312, Rayna, Pieterson, ПУСТОЙ УКАЗАТЕЛЬ, блондинка, фанта, ПУСТОЙ УКАЗАТЕЛЬ
Новая строка должна быть:
121312, Rayna, Pieterson, BMW123d, блондинка, фанта, ПУСТОЙ УКАЗАТЕЛЬ
Таким образом, я думал что-то вроде:
Обновите Человека (PersonalID, FirstName, LastName, Автомобиль, HairColour, FavDrink, FavFood) Автомобиль набора = @Car (где @Car не является пустым), HairColour = @HairColour (где @HairColour...)... и т.д.
Мое единственное беспокойство - то, что я не могу сгруппировать все условия в конце запроса, потому что он потребует, чтобы все значения имели то же условие. Не могу я делать что-то, любят Обновление HairColour, если @HairColour не является Пустым
Я бы использовал объединение для этого: http://msdn.microsoft.com/en-us/library/ms190349.aspx
update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)
Следующее должно работать:
UPDATE Person
SET Car = ISNULL(@Car, Car),
HairColour = ISNULL(@HairColour, HairColour),
...
Он использует функцию SQL Server ISNULL , которая возвращает
Установите столбец равным самому себе с нулевым округлением, установив его в свой параметр.
UPDATE
YourTable
SET
YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
ID = @id
Вы можете использовать функцию isnull
:
update Person
set
Car = isnull(@Car, Car),
HairColour = isnull(@HairColour, HairColour),
FavDrink = isnull(@FavDrink, FavDrink),
FavFood = isnull(@FavFood, FavFood)
where PersonalID = @PersonalID