1

根据 MSDN,@@IDENTITY returns the last identity value generated for any table in the current session, across all scopes.

有没有人遇到过此功能有用的情况?我想不出您希望为所有范围内的任何表生成最后一个 ID 或如何使用它的情况。

更新:

不知道所有的反对票是关于什么的,但我想我会试着澄清我在问什么。

首先,我知道何时使用 SCOPE_IDENTITY 和 IDENT_CURRENT。我想知道什么时候使用 @@IDENTITY 比使用这些其他选项更好?我还没有找到在日常工作中使用它的地方,我想知道是否有人可以描述一种情况,什么时候它是最好的选择。

大多数时候,当我看到它时,是因为有人不明白他们在做什么,但我认为微软包含它是有原因的。

4

2 回答 2

3

一般来说,不应该使用它。SCOPE_IDENTITY()使用起来要安全得多(只要我们谈论的是单行插入,正如上面评论中突出显示的那样),除了在以下情况下,@@IDENTITY可以使用一种方法(SCOPE_IDENTITY()在这种情况下不能):

  • 您的代码故意触发触发器
  • 触发器插入到具有标识列的表中
  • 调用代码需要触发器内部生成的标识值
  • 调用代码可以保证@@IDENTITY触发器中生成的值永远不会被更改以反映不同的表(例如,有人在您依赖的插入后将日志记录添加到触发器中)

这是一个奇怪的用例,但可行。

IDENTITY请记住,如果您要插入多行并需要返回多个值,这将不起作用。还有其他方法,但它们还需要允许来自游标的结果集的选项,并且 IIRC 不推荐使用此选项。

于 2012-07-06T15:44:03.980 回答
-2

@@IDENTITY 非常适合根据 ID 列识别单个行。

ID | Name | Age
1    AA     20
2    AB     30 
etc...

在这种情况下,ID 列将依赖于@@IDENTITY 属性。

于 2012-07-06T15:40:05.070 回答