我有一个存储过程,它使用一个简单的 UPDATE 并传递了一些变量。但是当它们的变量不为空时,我不想更新这些字段。这基本上就是我的陈述的样子。
UPDATE myTable
SET myColumn = @myColumn,
mColumn1 = @myColumn1
WHERE myColumn2 = @myColumn2
无论如何在SET中应用一些条件逻辑?我有大约 10 个字段需要检查,所以我不想对每个字段进行更新或类似的事情。
有任何想法吗?
我有一个存储过程,它使用一个简单的 UPDATE 并传递了一些变量。但是当它们的变量不为空时,我不想更新这些字段。这基本上就是我的陈述的样子。
UPDATE myTable
SET myColumn = @myColumn,
mColumn1 = @myColumn1
WHERE myColumn2 = @myColumn2
无论如何在SET中应用一些条件逻辑?我有大约 10 个字段需要检查,所以我不想对每个字段进行更新或类似的事情。
有任何想法吗?
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
如果变量为空,则保留当前列的值。
尝试使用合并功能如下
UPDATE myTable
SET myColumn = coalesce(myColumn,@myColumn),
mColumn1 = coalesce(mColumn1,@myColumn1)
WHERE myColumn2 = @myColumn2
上面的代码仅在它们为空时更新您的列。如果它们不为空,则代码设置存储在列中的相同值。
ISNULL(变量,在默认值为空的情况下)