在查询中显示两次列,第二次显示更新/设置后的数据

Mic*_*l A 2 sql t-sql sql-server sql-server-2005 sql-server-2008

出于测试目的,我想知道是否可以组合以下两个选项:

begin transaction

select  x
from    example_table

update  example_table
set     x = 'new value'

select  x
from    example_table

rollback transaction
Run Code Online (Sandbox Code Playgroud)

基本上,我想看到一个结果输出,如:

列名称,更新的列名称

Igo*_*nko 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
Run Code Online (Sandbox Code Playgroud)

来自Book OnLine

OUTPUT子句从INSERT,UPDATE,DELETE或MERGE语句影响的每一行返回信息或基于表达式的表达式.

...

DELETED是一个列前缀,用于指定更新或删除操作删除的值.前缀为DELETED的列反映UPDATE,DELETE或MERGE语句完成之前的值.

...

INSERTED是一个列前缀,指定插入或更新操作添加的值.以INSERTED为前缀的列反映UPDATE,INSERT或MERGE语句完成后但在执行触发器之前的值.

EDITED

begin transaction

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

rollback transaction
Run Code Online (Sandbox Code Playgroud)