Sql server 使用@identity而不是scope\u identity的原因
在SQL Server 2005数据库上,我们的一位远程开发人员刚刚签入了一个存储过程的更改,该存储过程将“select scope_identity”更改为“select@@identity”。你知道为什么要使用@@identity over scope\u identity吗?我想不出任何原因,除非有一个触发器然后插入了一行(或类似的行),我真的很想要触发器插入行的id,而不是我实际更改的行 换句话说,不,不是真的Sql server 使用@identity而不是scope\u identity的原因,sql-server,sql-server-2005,Sql Server,Sql Server 2005,在SQL Server 2005数据库上,我们的一位远程开发人员刚刚签入了一个存储过程的更改,该存储过程将“select scope_identity”更改为“select@@identity”。你知道为什么要使用@@identity over scope\u identity吗?我想不出任何原因,除非有一个触发器然后插入了一行(或类似的行),我真的很想要触发器插入行的id,而不是我实际更改的行 换句话说,不,不是真的 免责声明:不是T-SQL专家:) @@IDENTITY将返回当前会话发出的
- 免责声明:不是T-SQL专家:)
@@IDENTITY
将返回当前会话发出的最后一个标识值SCOPE\u IDENTITY()
返回当前会话和相同作用域中的最后一个标识值。它们通常是相同的,但假设调用了触发器,该触发器在当前语句之前的某个地方插入了某些内容@@IDENTITY
将通过触发器的INSERT
语句而不是块的INSERT语句返回标识值。除非他知道自己在做什么,否则这通常是一个错误。这里有一个可能有助于区分他们的方法
看起来像:
- 标识-连接上的最后一个标识
- 范围_标识-上次明确创建的标识(不包括触发器)
- IDENT_CURRENT('tablename')-表中的最后一个标识,不考虑范围或连接