Update

使用一個更新語句切換列中的值

  • January 12, 2017

您發現系統中的錯誤將數據庫中的男性 (M) 錯誤地命名為女性 (W),反之亦然。列只允許一個字元。在不使用任何臨時表的情況下,編寫一個更新查詢來解決此問題。

這個問題是在我最近的一次採訪中被問到的,我將參加更多可能有類似問題的採訪,所以我想知道如何處理這個問題。

您想使用CASE某種類型的表達式。

在 SQL Server 中,程式碼如下所示:

UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W' 
                 WHEN gender = 'W' THEN 'M'
                 ELSE gender END

編輯: 如評論(以及其他一些答案)中所述,如果您在語句上放置 WHERE 子句,則不需要 ELSE。

UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W' 
                 WHEN gender = 'W' THEN 'M' END
WHERE gender IN ('M','W')

這避免了不必要的更新。無論哪種情況,重要的是要記住除了 ​​M & W 之外還有其他選項(例如 NULL),並且您不想輸入錯誤資訊。例如:

UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W' 
                 ELSE 'M' END

這會將任何 NULL(或其他可能的性別)替換為不正確的“M”。


其他幾個選擇是

/*Simple form of CASE rather than Searched form*/
UPDATE TableName
SET    gender = CASE gender
                 WHEN 'M' THEN 'W'
                 WHEN 'W' THEN 'M'
               END
WHERE  gender IN ( 'M', 'W' );

而且更簡潔

/*For SQL Server 2012+*/
UPDATE TableName
SET    gender = IIF(gender = 'M', 'W', 'M')
WHERE  gender IN ( 'M', 'W' ); 

引用自:https://dba.stackexchange.com/questions/125171