【发布时间】:2011-10-21 09:40:41
【问题描述】:
我有以下疑问:
UPDATE #Temp_SessionItem SET [Status] =
CASE
WHEN ([AddressFK] IS NULL OR [StatusFK] IS NULL) AND [Status] = 1
THEN 3
WHEN [AddressFK] IS NOT NULL AND [StatusFK] IS NOT NULL AND [Status] = 1
THEN 2
END
问题是当它被执行时它实际上并没有给我我期望的结果。即它不会将 [Status] 字段的值设置为 3,以防 [AddressFK] 或 [StatusFK] 为 NULL。相反,它只是在应该添加 3 时尝试将 NULL 添加到 Status。
如果我删除表达式的 AND [Status] = 1 部分,它确实返回 3,但它也会更新不是 [Status] = 1 的值。
我在这里有什么明显的遗漏吗?
我使用的是 SQL Server 2008。
编辑:
在 Royi Namir 向我指出之后,我意识到问题肯定出在执行此查询的存储过程的更深处。具体来说,#Temp_SessionItem 只是一个临时表。在上面提到的查询之后,我尝试使用以下查询更新原始表:
-- update the status of the original session item table
UPDATE UploadSessionItem SET [Status] = T.[Status]
FROM #Temp_SessionItem AS T
WHERE UploadSessionItem.UploadSessionItemId = T.ID
..这显然不起作用,因为所有 [Status] 项目仍然存在 1
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-update case