28

我已经用谷歌搜索了这个问题一个星期,但没有任何有用的东西我认为没有使用正确的词

我正在使用带有 t-sql 的 SQL Server 2008,我需要在插入新行时优化我的功能。

我有一个表,第一列是整数自动增量类型的键,其他列仅供参考

当我们进行插入时,SQL Server 会自动增加键,我必须做一个选择最大值来获取值,所以有没有像全局变量之类的方法@@IDENTITY或函数来避免开始结束事务并选择最大值

4

4 回答 4

46

使用SCOPE_IDENTITY

-- do insert

SELECT SCOPE_IDENTITY();

这会给你:

插入到同一范围内的标识列中的最后一个标识值。范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两条语句在同一个存储过程、函数或批处理中,则它们属于同一范围。

于 2012-11-19T09:42:23.643 回答
8

刚刚运行代码:

INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;

它也有效!

于 2014-10-15T12:10:24.227 回答
4

最后一个自动增量值怎么样

SELECT IDENT_CURRENT('tableName')-IDENT_INCR('tableName');
于 2012-11-19T10:27:08.013 回答
1

就我而言,我必须使用@@Identity,因为我正在插入视图。SCOPE_IDENTITY 似乎只适用于您明确创建的那些。

看这里:

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

@@IDENTITY 将返回在当前会话中输入到表中的最后一个标识值。虽然@@IDENTITY 仅限于当前会话,但它不限于当前范围。如果您在一个表上有一个触发器导致在另一个表中创建一个身份,您将获得最后创建的身份,即使它是创建它的触发器。

于 2016-10-25T16:12:13.517 回答