Хранимая процедура SQL: если переменная не равна нулю, обновить оператор - PullRequest
22 голосов
/ 18 августа 2011

У меня есть оператор обновления в хранимой процедуре, который в целом выглядит следующим образом:

Update [TABLE_NAME]
Set XYZ=@ABC

Есть ли хороший способ вызвать оператор обновления, только если переменная не равна нулю или имеет значение -1?

Аналогично IF NOT EXISTS...INSERT вопросу.

Большое спасибо.

Ответы [ 3 ]

42 голосов
/ 18 августа 2011

Использование T-SQL IF:

IF @ABC IS NOT NULL AND @ABC != -1
    UPDATE [TABLE_NAME] SET XYZ=@ABC

Ознакомьтесь с документами MSDN .

25 голосов
/ 15 декабря 2011

Другим подходом, когда у вас много обновлений, будет использование COALESCE:

UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET    
    [ABC]  = COALESCE(@ABC, [ABC]),
    [ABCD] = COALESCE(@ABCD, [ABCD])
0 голосов
/ 22 июня 2016

Еще один подход - 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'
...