sql insert、update、delete完以后返回主键ID

本文介绍了如何在SQL中利用OUTPUT子句获取INSERT、UPDATE、DELETE操作后主键ID。举例说明了在不同DML语句中使用OUTPUT的用法,并解释了其返回受影响行信息的机制,强调了在事务处理和触发器中的注意事项。
摘要由CSDN通过智能技术生成

以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查了一些资料找到了output这一解决方案。

update [SmartPromoter] set [Name]='aaaaaaaa' output DELETED.[ID] where [Mobile]='18669698888'

经测试,insert、update、delete都可以返回主键ID

查了一下msdn关于output的用法:以下为msdn上的用法

 

 

 

返回受 INSERT、UPDATE、DELETE 或 MERGE 语句影响的各行中的信息,或返回基于受这些语句影响的各行的表达式。  这些结果可以返回到处理应用程序,以供在确认消息、存档以及其他类似的应用程序要求中使用。  也可以将这些结果插入表或表变量。  另外,您可以捕获嵌入的 INSERT、UPDATE、DELETE 或 MERGE 语句中 OUTPUT 子句的结果,然后将这些结果插入目标表或视图。  

System_CAPS_note注意

对于具有 OUTPUT 子句的 UPDATE、INSERT 或 DELETE 语句,即使在遇到错误需要回滚时,也会将行返回到客户端。  如果在运行语句的过程中出现任何错误,都不应使用该结果。  

用在以下语句中:

DELETE

INSERT

UPDATE

MERGE

适用范围:SQL Server(SQL Server 2008 至当前版本),Azure SQL Database。

主题链接图标Transact-SQL 语法约定

语法
 
 
 
 
<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

指定一个 table 变量,返回的行将插入此变量,而不是返回给调用方。   @ table_variable 必须在 INSERT、UPDATE、DELETE 或 MERGE 语句前声明。  

如果未指定 column_list,则 table 变量必须与 OUTPUT 结果集具有相同的列数。  标识列和计算列除外,这两种列必须跳过。  如果指定了column_list,则任何省略的列都必须允许 Null 值,或者都分配有默认值。  

有关 table 变量的详细信息,请参阅 表 (Transact-SQL)

output_table

指定一个表,返回的行将被插入该表中而不是返回到调用方。   output_table 可以为临时表。  

如果未指定 column_list,则表必须与 OUTPUT 结果集具有相同的列数。  标识列和计算列例外,  必须跳过这两种列。  如果指定了column_list,则任何省略的列都必须允许 Null 值,或者都分配有默认值。  

output_table 无法应用于以下情况:

  • 具有启用的对其定义的触发器。

  • 参与 FOREIGN KEY 约束的任意一方。

  • 具有 CHECK 约束或启用的规则。

column_list

INTO 子句目标表上列名的可选列表。  它类似于 INSERT 语句中允许使用的列列表。  

scalar_expression

可取计算结果为单个值的任何符号和运算符的组合。   scalar_expression 中不允许使用聚合函数。  

对修改的表中的列的任何引用都必须使用 INSERTED 或 DELETED 前缀限定。

column_alias_identifier

用于引用列名的代替名称。

DELETED

指定由更新或删除操作删除的值的列前缀。  以 DELETED 为前缀的列反映了 UPDATE、DELETE 或 MERGE 语句完成之前的值。  

不能在 INSERT 语句中同时使用 DELETED 与 OUTPUT 子句。

INSERTED

列的前缀,指定由插入操作或更新操作添加的值。  以 INSERTED 为前缀的列反映了在 UPDATE、INSERT 或 MERGE 语句完成之后但在触发器执行之前的值。  

INSERTED 语句不能与 DELETE 语句的 OUTPUT 子句同时使用。

from_table_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值