У меня есть оператор обновления в хранимой процедуре, который обычно выглядит следующим образом:
Update [TABLE_NAME]
Set XYZ=@ABC
Есть ли хороший способ активировать оператор обновления только в том случае, если переменная не является нулем или значением -1?
Подобно вопросу IF NOT EXISTS ... INSERT
.
Большое вам спасибо.
Используйте T-SQL IF
:
IF @ABC IS NOT NULL AND @ABC != -1
UPDATE [TABLE_NAME] SET XYZ=@ABC
Посмотрите документы MSDN .
Другим подходом, когда у вас много обновлений, будет использование COALESCE:
UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET
[ABC] = COALESCE(@ABC, [ABC]),
[ABCD] = COALESCE(@ABCD, [ABCD])
Еще один подход - ISNULL ().
UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET
[ABC] = ISNULL(@ABC, [ABC]),
[ABCD] = ISNULL(@ABCD, [ABCD])
Разница между ISNULL и COALESCE - это тип возвращаемого значения. COALESCE также может принимать более 2 аргументов и использовать первый, который не является нулевым. Т.е.
select COALESCE(null, null, 1, 'two') --returns 1
select COALESCE(null, null, null, 'two') --returns 'two'