2012-01-09 49 views

回答

5

如果我理解正確的話,你可以使用OUTPUT條款做(SQL Server 2005中+)

use tempdb 
go 

create table #tbl (i int) 

insert into #tbl values (10),(20),(30),(40) 

update #tbl 
set i=i+1 
output deleted.i i_old,inserted.i i_updated 

drop table #tbl 

從聯機OnLine

輸出子句返回的信息,或基於表達式,每個 行受INSERT,UPDATE,DELETE或MERGE語句。

...

DELETED是一個列前綴,指定由 更新刪除的價值或刪除操作。在UPDATE,DELETE或MERGE語句完成之前,以DELETED作爲前綴的列反映 的值。

...

INSERTED是一個列前綴,指定由 插入或更新操作增加的價值。在執行UPDATE,INSERT或MERGE語句之前,以INSERTED作爲前綴的列反映 值,但執行觸發器之前爲 。

EDITED

begin transaction 

update example_table 
set  x = 'new value' 
output deleted.x old_value, inserted.x new_value 

rollback transaction 
+0

我不確定如果我解釋自己正確。實際上,我正在更新一個預先存在的表格,並希望顯示原始值的輸出以及我已將其更改爲的新值。 – Codingo 2012-01-09 04:00:24

+1

@Michael這就是我的例子演示。我創建,填充數據和刪除表只是爲了舉一個例子。其實你只需要'更新...' – 2012-01-09 04:05:25

+0

我很抱歉,但我有點困惑 - 你可以再次使用原始帖子中的例子嗎? – Codingo 2012-01-09 04:40:02