SQL server 2012 – Spalte aktualisieren, wenn Bedingung erfüllt ist (CASE) sonst nicht aktualisieren

Im folgenden Beispiel werden die Spalten "SecondColumn" und "ThirdColumn" immer aktualisiert, sobald der Codeblock läuft. 'FirstColumn' aktualisiert sich auf den in der variables @NumberOfRows gespeicherten Wert (solange es> 0 ist).

Das Problem, das ich habe, ist, dass @NumberOfRows 0 oder weniger ist, wird 'FirstColumn' auf NULL gesetzt.

Ist es möglich, dies zu optimieren, so dass, wenn @NumberOfRows 0 oder weniger ist, dann die 'FirstColumn' überhaupt nicht aktualisiert, anstatt die Spalte auf NULL zu setzen?

 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 

Die einfachste Sache zu tun ist, aktualisieren Sie das Feld mit dem aktuellen Wert.

 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 

@NumberOfRows <= 0 Sie die Aktualisierung der angegebenen Spalte nicht aus, wenn @NumberOfRows <= 0 :

 DECLARE @NumberOfRows INT = 0 ,@NewValue DATETIME = GETDATE() ,@Other INT = 99 BEGIN IF @NumberOfRows > 0 BEGIN UPDATE x SET x.FirstColumn = @NewValue ,x.SecondColumn = SYSDATETIMEOFFSET() ,x.ThirdColumn = @Other FROM TestTable x WHERE x.ID = 100 END ELSE BEGIN UPDATE x SET x.SecondColumn = SYSDATETIMEOFFSET() ,x.ThirdColumn = @Other FROM TestTable x WHERE x.ID = 100 END END