SQLServer SELECT @@IDENTITY 遇到的坑

Posted 你好世界!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer SELECT @@IDENTITY 遇到的坑相关的知识,希望对你有一定的参考价值。

经常在写存储过程的时候获取当前插入后的ID都会用  @@IDENTITY

但是今天在用 @@IDENTITY的时候涉及到当前数据的插入会有insert触发器发生时,发现与实际插入的ID值对不上,网上查询了一下,用SCOPE_IDENTITY()就好了

select SCOPE_IDENTITY()

返回上面操作的数据表最后row的IDENTITY 列的值;

返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

SELECT   @@IDENTITY

返回上面操作最后一个数据表的最后row的IDENTITY 列的值;
创建表:

create table T_User(F_ID int identity(1,1) not null,F_Name varchar(20) not null)

插入数据:

insert into T_User(F_Name) values(我是谁) Select SCOPE_IDENTITY()

存储过程:

CREATE PROCEDURE [dbo].[sp_User](@F_Name int) AS
begin tran Insertinto_T_User
Insert into  dbo.T_User(F_Name) values(@F_Name)
Select SCOPE_IDENTITY()

 


以上是关于SQLServer SELECT @@IDENTITY 遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver insert into select

SQL Server 查询优化器执行不必要的连接

SqlServer对select * from (select *from table) 支持

SQLserver查询语句

创建一个虚拟值

在多线程环境中的 SQL Server 中插入后获取 ID?