2

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

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

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

有任何想法吗?

4

3 回答 3

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

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

于 2013-09-04T13:28:59.450 回答
4

尝试使用合并功能如下

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

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

于 2013-09-04T13:28:19.850 回答
1

ISNULL(变量,在默认值为空的情况下)

信息

于 2013-09-04T13:28:01.560 回答