【IT168技术文档】
这个功能太期待了,以前只有INSTEAD OF才有的功能移植到sql语句来了,太棒了!
可以通过引用插入的表和删除的表来访问被修改的行的旧/新映像,其方式与访问触发器类似。
在 INSERT 语句中,只能访问插入的表。
在 DELETE 语句中,只能访问删除的表。
在 UPDATE 语句中,可以访问插入的表和删除的表。
可以通过into语句将输出导入表变量中
以下语句中不支持 OUTPUT 子句:1 2--先创建一个表 3create table test2( 4[no] int , 5n nvarchar(100) 6) 7--插入测试数据 8insert into test2([no],n) 9select 1,'a' 10union 11select 2,'b' 12union 13select 3,'c' 14go 15 16--插入数据时调用 17--把插入数据显示出来 18INSERT test2([no],n) 19OUTPUT INSERTED.* 20VALUES (4, N'd'); 21GO 22/**//* 23no n 244 d 25*/ 26select * from test2 27go 28/**//* 29no n 301 a 312 b 323 c 334 d 34*/ 35 36 37 38DECLARE @MyTableVar table( 39[no] int , 40n nvarchar(100) 41); 42 43--把[no]=1的记录删除,并把删除结果保存到表变量@MyTableVar中 44delete from test2 45output deleted.* 46into @MyTableVar 47where [no]=1 48 49select * from @MyTableVar 50/**//* 51no n 521 a 53*/ 54select * from test2 55/**//* 56no n 572 b 583 c 594 d 60*/ 61 62 63 64DECLARE @MyTableVar table( 65Newno int , 66Newn nvarchar(100), 67Oldno int , 68Oldn nvarchar(100) 69); 70 71-- 修改记录,保存修改前后的记录到表变量中 72update test2 73set n='ccc' 74output 75 inserted.no, 76 inserted.n, 77 deleted.no, 78 deleted.n 79into @MyTableVar 80where [no]=3 81 82select * from @MyTableVar 83/**//* 84Newno Newn Oldno Oldn 853 ccc 3 c 86*/ 87select * from test2 88/**//* 89no n 902 b 913 ccc 924 d 93*/
· 引用本地分区视图、分布式分区视图或远程表的 DML 语句。
· 包含 EXECUTE 语句的 INSERT 语句。