解决方法
SELECT SCOPE_IDENTITY()
使用@@ IDENTITY可能会有意想不到的结果,所以要小心如何使用它.将记录插入其他表的触发器将导致@@ IDENTITY值发生变化,其中,SCOPE_IDENTITY()将仅从当前作用域提供最后一个身份.
以下是一个示例,它将显示@@ IDENTITY和SCOPE_INSERT()之间的区别,以及如何返回不同的值.
use tempdb go create table table1 (ID int identity) go create table table2 (ID int identity(100,1)) go create trigger temptrig on table1 for insert as begin insert table2 default values; end go insert table1 default values; select SCOPE_IDENTITY(),@@IDENTITY
没有人在这里讨论的另一个选择是使用sql 2005中的OUTPUT子句.在这种情况下,您只需要将输入子句添加到插入,然后从代码中捕获该记录集.当插入多个记录而不是只有1个时,这很好
use tempdb go create table table1 (ID int identity) go insert table1 output inserted.ID default values; --OR... insert table1 output inserted.$identity default values;