Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用@identity而不是scope\u identity的原因_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 使用@identity而不是scope\u identity的原因

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将返回当前会话发出的

在SQL Server 2005数据库上,我们的一位远程开发人员刚刚签入了一个存储过程的更改,该存储过程将“select scope_identity”更改为“select@@identity”。你知道为什么要使用@@identity over scope\u identity吗?

我想不出任何原因,除非有一个触发器然后插入了一行(或类似的行),我真的很想要触发器插入行的id,而不是我实际更改的行

换句话说,不,不是真的

  • 免责声明:不是T-SQL专家:)

@@IDENTITY
将返回当前会话发出的最后一个标识值
SCOPE\u IDENTITY()
返回当前会话和相同作用域中的最后一个标识值。它们通常是相同的,但假设调用了触发器,该触发器在当前语句之前的某个地方插入了某些内容
@@IDENTITY
将通过触发器的
INSERT
语句而不是块的INSERT语句返回标识值。除非他知道自己在做什么,否则这通常是一个错误。

这里有一个可能有助于区分他们的方法

看起来像:

  • 标识-连接上的最后一个标识
  • 范围_标识-上次明确创建的标识(不包括触发器)
  • IDENT_CURRENT('tablename')-表中的最后一个标识,不考虑范围或连接

如果你想使用触发器,你可以再加一个触发器,这是我能想到的唯一原因。即使如此,这也是危险的,因为可能会添加另一个触发器,并且再次得到错误的身份。我怀疑开发者不知道他在做什么。但老实说,最好的办法是问他为什么做出改变。您可以将其更改回去,但开发人员需要知道,除非他需要触发器标识,否则不要再这样做,因为下次您可能无法捕获它。

也许您应该询问开发人员进行更改的理由

我知道两者之间的区别,我只是在想为什么你会使用@@identity而不是scope\u identity。