我有一个存储过程,它使用一个简单的UPDATE并传递一些变量。但是当我们的变量不为null时,我不想更新这些字段。这基本上就是我的陈述。
UPDATE myTable
SET myColumn = @myColumn,
mColumn1 = @myColumn1
WHERE myColumn2 = @myColumn2
无论如何在SET中应用一些条件逻辑?我有大约10个需要检查的字段,所以我不希望每个字段或类似的事情进行更新。
有什么想法吗?
答案 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(变量,如果为空默认值)