我已经用一周的时间搜索了这个问题而没有任何有用的东西,我认为我没有使用正确的单词
我正在使用带有t-sql的SQL Server 2008,我需要在插入新行时优化我的功能。
我有一个第一列的表是整数自动增量类型的关键,其他列只是用于信息
当我们进行插入时,SQL Server会自动递增密钥,我必须执行select max来获取值,所以有没有像@@IDENTITY
之类的全局变量或者避免开始的函数结束交易并选择最大值
答案 0 :(得分:34)
-- do insert
SELECT SCOPE_IDENTITY();
哪个会给你:
插入到标识列中的最后一个标识值 相同的范围。范围是一个模块:存储过程,触发器, 功能或批处理。因此,如果两个语句属于同一范围 它们处于相同的存储过程,功能或批处理中。
答案 1 :(得分:5)
刚刚运行代码:
INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;
它也有效!
答案 2 :(得分:3)
上次自动增量值
的情况如何?SELECT IDENT_CURRENT('tableName')-IDENT_INCR('tableName');
答案 3 :(得分:0)
答案 4 :(得分:0)
在我的情况下,我不得不使用@@ Identity,因为我正在插入视图。似乎SCOPE_IDENTITY仅适用于您明确创建的那些。
见这里:
@@ IDENTITY将返回输入表中的最后一个标识值 你当前的会议。虽然@@ IDENTITY仅限于当前 会话,它不限于当前范围。如果你有一个触发器 在一个导致在另一个表中创建标识的表上,您 将获得最后创建的标识,即使它是 创建它的触发器。