Избегайте динамического SQL в целом . Рассмотрим сценарий, в котором ваш сохраненный процесс принимает все возможные параметры, но обновляет таблицу только теми значениями, которые указывает вызывающая программа, или, скорее, они не равны нулю.
Используйте ISNULL()
, а в операторе UPDATE
используйте текущие значения строки. COALESCE
также может быть использовано.
CREATE PROC UpdateCustomer
@ID int,
@FirstName varchar(100),
@LastName varchar(100),
@LastLoginTime smalldatetime
AS
UPDATE Customer
SET FirstName = ISNULL(@FirstName,FirstName)
,LastName = ISNULL(@LastName ,LastName)
,LastLoginDate = ISNULL(@LastLoginTime ,LastLoginDate )
WHERE ID = @ID
Вам просто нужно настроить, чтобы ваш клиентский код передавал NULL
для значений, которые он хочет сохранить в строке.
В этом случае вы хотите сохранить NULL
и перезаписать текущее значение столбца. Вам нужно было бы написать об этом или отправить какой-нибудь другой флаг, если бы это было так.