Хранимая процедура SQL: Если переменная не равна нулю, оператор обновления

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

Update [TABLE_NAME]
Set XYZ=@ABC

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

Подобно вопросу IF NOT EXISTS ... INSERT .

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

22
задан Curt 18 August 2011 в 18:12
поделиться

3 ответа

Используйте T-SQL IF:

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

Посмотрите документы MSDN .

43
ответ дан 29 November 2019 в 03:38
поделиться

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

UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET    
    [ABC]  = COALESCE(@ABC, [ABC]),
    [ABCD] = COALESCE(@ABCD, [ABCD])
25
ответ дан 29 November 2019 в 03:38
поделиться

Еще один подход - 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'
0
ответ дан 29 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: