在SQL Server 2005数据库上,我们的一位远程开发人员刚刚检查了对“select scope_identity”更改为“select @@ identity”的存储过程的更改。您是否知道为什么要在scope_identity上使用@@ identity?
答案 0 :(得分:18)
@@IDENTITY
将返回当前会话发出的最后一个标识值。 SCOPE_IDENTITY()
返回当前会话和相同范围中的最后一个标识值。它们通常是相同的,但假设调用了一个触发器,它在当前语句之前的某处插入了一些内容。 @@IDENTITY
将通过触发器的INSERT
语句返回标识值,而不是块的insert语句。除非他知道自己在做什么,否则这通常是个错误。
答案 1 :(得分:12)
以下a link可能有助于区分它们
看起来像:
答案 2 :(得分:2)
我想不出任何,除非有一个触发器然后插入一行(或某些)并且我真的非常想要触发插入行的id而不是我实际改变的行。
换句话说,不,不是真的。
答案 3 :(得分:1)
也许你应该问开发者他们做出改变背后的理由。
答案 4 :(得分:0)
如果您想要使用触发器,您可以添加另一个触发器是我能想到的唯一原因。即使这样,它也很危险,因为可以添加另一个触发器并再次获得错误的身份。我怀疑开发人员不知道他在做什么。但老实说,最好的办法就是问他为什么要做出改变。您可以将其更改回来,但开发人员需要知道不要再次执行此操作,除非他需要触发器标识,因为您可能无法在下次捕获它。