SQL OUTPUT 命令 (Transact-SQL)
功能描述:
- 返回受INSERT、UPDATE、DELETE或MERGE语句影响的每一行的信息,或基于该行的表达式。
- 这些结果可以返回到处理应用程序中,以用于确认消息、归档和其他此类应用程序需求。
- 结果也可以插入表或表变量中。
- 此外,您还可以在嵌套INSERT、UPDATE、DELETE或MERGE语句中捕获输出子句的结果,并将这些结果插入目标表或视图中。
语法:
<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 更新时间: