Update
使用一個更新語句切換列中的值
您發現系統中的錯誤將數據庫中的男性 (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' );