正确使用Sql CASE语句

lev*_*bra 1 t-sql case sql-server-2008

我有以下查询,我用来更新性别列,如果它设置为男性,然后更新为M,为女性,更新到F

该声明第一次正常运行.

UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F'  END WHERE Id=40
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果性别已经是'M',那么当再次运行该语句时,'M'被设置为NULL

我可以在下面做,但它似乎有点软糖

UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F' 
    WHEN GENDER = 'M' THEN 'M'
WHEN GENDER = 'F' THEN 'F'
END WHERE Id=40
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议吗?

谢谢

Max*_*Max 5

向WHERE子句添加另一个条件:

UPDATE [People].[People]
SET GENDER = CASE WHEN GENDER = 'Male' THEN 'M' 
WHEN GENDER = 'Female' THEN 'F'  END 
WHERE Id=40 
AND NOT GENDER IN ('M', 'F') 
Run Code Online (Sandbox Code Playgroud)

这样可以避免再次更新行.