Thursday, October 20, 2011

SQL UPDATE CASE WHEN 的使用方法

前幾天赫然發現系統中所有的進帳的交易是寫成出賬的。
先罵自己蠢之後趕快更新資料庫裡所有的交易。

分辨進出賬欄位名稱是 TransactionType:
I 代表進帳,O 代表出賬。

很不幸的所有的I跟O都對調了,不過還好的是一行SQL就可以解決。

UPDATE Transactions SET TransactionType = (
  CASE TransactionType
  WHEN 'I' THEN 'O'
  WHEN 'O' THEN 'I'
  ELSE TransactionType END)


如果不用CASE WHEN要分兩次更新幾乎不可能,因為所有的I變成O之後就無法區分哪些O需要被改成I了。

以上的SQL可以再加上WHERE TransactionType IN ('I', 'O') 限制只改進賬跟出賬交易。

加上UPDATE FROM的做法,SQL的UPDATE可以做到很活。