fez*_*fez 0 sql-server case sql-server-2012
在下面的示例中,每次运行代码块时,列"SecondColumn"和"ThirdColumn"将始终更新.'FirstColumn'将更新为存储在变量中的值@NumberOfRows
(只要它> 0).
我遇到的问题是当@NumberOfRows
0或更小时,'FirstColumn'将被设置为NULL.
是否可以调整此值,以便if @NumberOfRows
为0或更小,那么'FirstColumn'根本不更新而不是将列设置为NULL?
DECLARE
@NumberOfRows INT = 0
,@NewValue DATETIME = GETDATE()
,@Other INT = 99
BEGIN
UPDATE x
SET x.FirstColumn = (CASE WHEN @NumberOfRows > 0 THEN @NewValue END)
,x.SecondColumn = SYSDATETIMEOFFSET()
,x.ThirdColumn = @Other
FROM TestTable x
WHERE x.ID = 100
END
Run Code Online (Sandbox Code Playgroud)
最简单的方法是使用当前值更新字段.
DECLARE
@NumberOfRows INT = 0
,@NewValue DATETIME = GETDATE()
,@Other INT = 99
BEGIN
UPDATE x
SET x.FirstColumn = (CASE WHEN @NumberOfRows > 0 THEN @NewValue ELSE x.FirstColumn END)
,x.SecondColumn = SYSDATETIMEOFFSET()
,x.ThirdColumn = @Other
FROM TestTable x
WHERE x.ID = 100
END
Run Code Online (Sandbox Code Playgroud)