SQL Server 2012 - 如果满足条件,则更新列(CASE)否则不更新

fez*_*fez 0 sql-server case sql-server-2012

在下面的示例中,每次运行代码块时,列"SecondColumn"和"ThirdColumn"将始终更新.'FirstColumn'将更新为存储在变量中的值@NumberOfRows(只要它> 0).

我遇到的问题是当@NumberOfRows0或更小时,'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)

Unh*_*ean 5

最简单的方法是使用当前值更新字段.

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)