SQL SERVER 2005版开始,微软在INSERT 、UPDATE 、DELETE 语句中引入了一个 output 关键字,可以输出 这些DML语句影响的相关数据。
ouput 语句中可以引用 inserted, deleted 特殊表,概念和触发器很相似。
如:
create table #test( key_col int);
insert into #test values( 0 );
DECLARE @ins TABLE( key_col int);
DECLARE @del TABLE( key_col int);
update #test
set
key_col = 1
output deleted.key_col into @del
output inserted.key_col
语法:
[ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ]
[ OUTPUT <dml_select_list> ]
这两种语句可以只要一种,也可以同时出现,同时出现时,带 into 的 需要放到前面。而且每一种只能出现一次,如下是会报错的:
update #test
set
key_col = 1
output deleted.key_col into @del
output inserted.key_col into @ins
使用场景:
1. 根据当前表的数据有条件的生成历史或新的初始化数据;
2. 把INSERT 、UPDATE 或 DELETE 语句影响的每行的信息暂存处理或反馈给应用程序完成业务或逻辑的完整性;
3. OUTPUT 子句对于在 INSERT 或 UPDATE 操作之后检索标识列或计算列的值可能非常有用;
注意事项:
以下语句中不支持 OUTPUT 子句:
1、引用本地分区视图、分布式分区视图或远程表的 DML 语句。
2、包含 EXECUTE 语句的 INSERT 语句。
3、不能将 OUTPUT INTO 子句插入视图或行集函数。
4、参数或变量作为 UPDATE 语句的一部分进行了修改,则 OUTPUT 子句将始终返回语句执行之前的参数或变量的值而不是已修改的值。