SQL代码在值1和NULL之间切换

Osy*_*ett -2 t-sql sql-server

UPDATE [MyDatabase].[dbo].[MyTable1]
SET [MyTable1].[Column To Be Updated] = 
        CASE WHEN [MyTable1].[Column To Be Updated] IS NULL THEN 1
                 WHEN [MyTable1].[Column To Be Updated] = 0 THEN 1
        END
FROM [MyDatabase].[dbo].[MyTable1]
INNER JOIN [MyDatabase].[dbo].[MyTable2] mt2 WITH(NOLOCK)
ON mt2.[AN ID] = [MyDatabase].[dbo].[MyTable1].[AN ID]
WHERE dm.[ANOTHER ID] = '1234'
Run Code Online (Sandbox Code Playgroud)

此列可以包含NULL,0,1,2或3.

当我运行这个SQL时,它将NULL,0,2和3更改为1,它将1更改为NULL.如果我再次运行它会将1更改为NULL并将NULL更改为1.(这是SQL Server 11中的T-SQL)

我很困惑为什么它表现出这种行为.任何帮助,将不胜感激.

dig*_*ron 6

它交替的原因是你的CASE陈述.没有ELSEnor DEFAULT子句,因此当列与您的任何条件都不匹配时,该值将设置为NULL.当更新再次运行时,NULL是一个处理的情况,因此该值设置为1.