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)
我很困惑为什么它表现出这种行为.任何帮助,将不胜感激.
它交替的原因是你的CASE陈述.没有ELSEnor DEFAULT子句,因此当列与您的任何条件都不匹配时,该值将设置为NULL.当更新再次运行时,NULL是一个处理的情况,因此该值设置为1.