SQL SERVER insert/delete/update 中的 ouput语句

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 子句将始终返回语句执行之前的参数或变量的值而不是已修改的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值