我已经用谷歌搜索了这个问题一个星期,但没有任何有用的东西我认为没有使用正确的词
我正在使用带有 t-sql 的 SQL Server 2008,我需要在插入新行时优化我的功能。
我有一个表,第一列是整数自动增量类型的键,其他列仅供参考
当我们进行插入时,SQL Server 会自动增加键,我必须做一个选择最大值来获取值,所以有没有像全局变量之类的方法@@IDENTITY
或函数来避免开始结束事务并选择最大值
我已经用谷歌搜索了这个问题一个星期,但没有任何有用的东西我认为没有使用正确的词
我正在使用带有 t-sql 的 SQL Server 2008,我需要在插入新行时优化我的功能。
我有一个表,第一列是整数自动增量类型的键,其他列仅供参考
当我们进行插入时,SQL Server 会自动增加键,我必须做一个选择最大值来获取值,所以有没有像全局变量之类的方法@@IDENTITY
或函数来避免开始结束事务并选择最大值
-- do insert
SELECT SCOPE_IDENTITY();
这会给你:
插入到同一范围内的标识列中的最后一个标识值。范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两条语句在同一个存储过程、函数或批处理中,则它们属于同一范围。
刚刚运行代码:
INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;
它也有效!
最后一个自动增量值怎么样
SELECT IDENT_CURRENT('tableName')-IDENT_INCR('tableName');
就我而言,我必须使用@@Identity,因为我正在插入视图。SCOPE_IDENTITY 似乎只适用于您明确创建的那些。
看这里:
@@IDENTITY 将返回在当前会话中输入到表中的最后一个标识值。虽然@@IDENTITY 仅限于当前会话,但它不限于当前范围。如果您在一个表上有一个触发器导致在另一个表中创建一个身份,您将获得最后创建的身份,即使它是创建它的触发器。