SQL存储过程:如果变量不为null,则更新语句

时间:2011-08-18 17:58:12

标签: sql tsql stored-procedures sql-update

我在存储过程中有一个更新语句,通常看起来像这样:

Update [TABLE_NAME]
Set XYZ=@ABC

如果变量不为null或值为-1?

,是否有一种只触发update语句的好方法

类似于IF NOT EXISTS...INSERT问题。

非常感谢你。

3 个答案:

答案 0 :(得分:42)

使用T-SQL IF

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

查看MSDN docs

答案 1 :(得分:25)

当您有许多更新时,另一种方法是使用COALESCE:

UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET    
    [ABC]  = COALESCE(@ABC, [ABC]),
    [ABCD] = COALESCE(@ABCD, [ABCD])

答案 2 :(得分:0)

另一种方法是ISNULL()。

UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET    
    [ABC]  = ISNULL(@ABC, [ABC]),
    [ABCD] = ISNULL(@ABCD, [ABCD])

ISNULL和COALESCE之间的区别是返回类型。 COALESCE也可以使用2个以上的参数,并使用第一个不为null的参数。即。

select COALESCE(null, null, 1, 'two') --returns 1
select COALESCE(null, null, null, 'two') --returns 'two'