2011年5月15日 星期日

你知道Update陳述式更新欄位值的同時可指派給變數值嗎?

  你可曾注意到BOL關於UPDATE (Transact-SQL) 這章節裡,有下列這樣一行嗎?

   SET @variable = column = expression
  
  平常我為了取得Update後的某欄位值,通常會在Update之後再下一次Select去取得該欄位,但其實不用那麼麻煩

  在Update欄位值的同時可以將更新後的值,直接指派給變數喔,這用法好酷,我直到看到Assign a variable while changing the column – a little known trick才知道可以這樣用,但其實BOL早有寫了,這件事告訴我,我BOL沒仔細看啊,BOL說明截取如下
SET @variable = column = expression 會將變數設成與資料行相同的值。這有別於 SET @variable = columncolumn = expression,它會將變數設成資料行更新之前的值。
  也就是說,我可以在Update陳述式裡,同時將更新前後的值指派兩個不同的變數喔,不用再額外下Select取得,範例如下

use AdventureWorks

declare @BeforeUpdValue money
declare @AfterUpdValue money


update Sales.SalesOrderDetail

set @AfterUpdValue = UnitPrice = UnitPrice + 10,    @BeforeUpdValue = UnitPrice
where SalesOrderID = 43659 and SalesOrderDetailID = 11

select @BeforeUpdValue as '更新前UnitPrice', @AfterUpdValue as '更新後UnitPrice'


  要注意的這只適用更新單一資料列的情況,若更新的為多筆資料,就不太適合用了喔,會取到意想不到的值啊

0 意見:

張貼留言