SQL OUTPUT 命令 (Transact-SQL)

SQL OUTPUT 命令 (Transact-SQL)

功能描述:

  • 返回受INSERT、UPDATE、DELETE或MERGE语句影响的每一行的信息,或基于该行的表达式。
  • 这些结果可以返回到处理应用程序中,以用于确认消息、归档和其他此类应用程序需求。
  • 结果也可以插入表或表变量中。
  • 此外,您还可以在嵌套INSERT、UPDATE、DELETE或MERGE语句中捕获输出子句的结果,并将这些结果插入目标表或视图中。

语法:

1
2
3
4
5
6
7
8
9
10
11
12
<OUTPUT_CLAUSE> ::= 
    [ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ] 
    [ OUTPUT <dml_select_list> ] 
<dml_select_list> ::= 
{ <column_name> | scalar_expression } [ [AS] column_alias_identifier ] 
    [ ,...n ] 
   
<column_name> ::= 
{ DELETED | INSERTED | from_table_name } . { * | column_name } 
    | $action

参数:

  • @table_variable
    • 指定将返回的行插入其中而不是返回给调用者的表变量。@必须在INSERT、UPDATE、DELETE或MERGE语句之前声明table U变量。
    • 如果未指定column_list ,则表变量的列数必须与输出结果集的列数相同。例外情况是标识列和计算列,必须跳过这些列。如果指定了column_list ,则任何省略的列都必须允许空值或为其指定默认值。
  • output_table
    • 指定将返回的行插入其中而不是返回给调用方的表。output_table可以是临时表。
    • 如果未指定column_list ,则表的列数必须与输出结果集的列数相同。例外情况是identity和computed列。这些必须跳过。如果指定了column_list ,则任何省略的列都必须允许空值或为其指定默认值。
    • output_table 不能:
      • 已启用在其上定义的触发器。
      • 参与外键约束的任一侧。
      • 具有检查约束或启用的规则。
  • column_list
    • 是INTO子句的目标表上列名的可选列表。它类似于INSERT语句中允许的列列表。
  • scalar_expression
    • 计算结果为单个值的符号和运算符的任何组合。标量表达式中不允许使用聚合函数。
    • 对要修改的表中的列的任何引用都必须使用INSERTED或DELETED前缀进行限定。
  • column_alias_identifier 列别名标识符
    • 是用于引用列名的备用名称。
  • DELETED 删除
    • 列前缀,指定由更新或删除操作删除的值。前缀为DELETED的列反映UPDATE、DELETE或MERGE语句完成之前的值。
    • DELETED不能与INSERT语句中的OUTPUT子句一起使用。
  • INSERTED 插入
    • 指定由插入或更新操作添加的值的列前缀。前缀为INSERTED的列反映UPDATE、INSERT或MERGE语句完成后但在执行触发器之前的值。
    • INSERTED不能与DELETE语句中的OUTPUT子句一起使用。
  • from_table_name
    • 是一个列前缀,用于指定要更新或删除的行的DELETE、UPDATE或MERGE语句的FROM子句中包含的表。
    • 如果FROM子句中也指定了要修改的表,则对该表中列的任何引用都必须使用INSERTED或DELETED前缀进行限定。
  • *
    • 指定受delete、insert或update操作影响的所有列将按它们在表中的存在顺序返回。
    • 例如,下面DELETE语句中的OUTPUT DELETED.*将返回从ShoppingCartItem表中删除的所有列:
      • DELETE Sales.ShoppingCartItem
      • OUTPUT DELETED.*;
  • column_name
    • 是显式列引用。对要修改的表的任何引用都必须根据需要使用INSERTED或DELETED前缀正确限定,例如:INSERTED**.**column_name.
  • $action
    • 仅对MERGE语句可用。在MERGE语句的OUTPUT子句中指定nvarchar(10)类型的列,该列根据对该行执行的操作为每行返回三个值之一:“INSERT”、“UPDATE”或“DELETE”。

 

 

 

 

创建时间:2020.09.24  更新时间:

 

posted on   滔Roy  阅读(505)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报

导航

点击右上角即可分享
微信分享提示