我可以在Update的SET中检查变量是否为NULL吗?

时间:2013-09-04 13:25:28

标签: sql sql-server stored-procedures

我有一个存储过程,它使用一个简单的UPDATE并传递一些变量。但是当我们的变量不为null时,我不想更新这些字段。这基本上就是我的陈述。

UPDATE myTable
SET myColumn = @myColumn,
    mColumn1 = @myColumn1
WHERE myColumn2 = @myColumn2

无论如何在SET中应用一些条件逻辑?我有大约10个需要检查的字段,所以我不希望每个字段或类似的事情进行更新。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

COALESCE是你的朋友。它返回第一个非NULL参数。我从你的叙述中确实不确定你想要的东西,它是:

UPDATE myTable
SET myColumn = COALESCE(myColumn,@myColumn),
    mColumn1 = COALESCE(myColumn1,@myColumn1)
WHERE myColumn2 = @myColumn2

如果列不为空,则保留当前列的值,或

UPDATE myTable
SET myColumn = COALESCE(@myColumn,myColumn),
    mColumn1 = COALESCE(@myColumn1,myColumn1)
WHERE myColumn2 = @myColumn2

如果变量为空,则保留当前列的值。

答案 1 :(得分:4)

尝试使用coalesce功能,如下所示

UPDATE myTable
SET myColumn = coalesce(myColumn,@myColumn),
    mColumn1 = coalesce(mColumn1,@myColumn1)
WHERE myColumn2 = @myColumn2

以上代码仅在列为空时更新列。如果它们不为null,则代码将设置存储在列中的相同值。

答案 2 :(得分:1)

ISNULL(变量,如果为空默认值)

INFO