ScopE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 是相似的函数,因为它们都返回插入到标识列中的值。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关详细信息,请参阅 IDENT_CURRENT (Transact-sql)。
ScopE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,ScopE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。在使用的时候我们常常不知道用哪一个, 下面的示例介绍如何针对为合并复制发布的数据库中的插入内容使用 @@IDENTITY 和 ScopE_IDENTITY()。示例中的两个表均在 AdventureWorks 示例数据库中,其中 Person.ContactType 未发布,Sales.Customer 已发布。合并复制将把触发器添加到已发布的表中。因此,@@IDENTITY 可以从复制系统表中的插入内容而非用户表中的插入内容返回值。
Person.ContactType 表的最大标识值为 20。如果在此表中插入一行,@@IDENTITY 和 ScopE_IDENTITY() 返回相同的值。
- USE AdventureWorks;
- GO
- INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')
- GO
- SELECT ScopE_IDENTITY() AS [ScopE_IDENTITY]
- GO
- SELECT @@IDENTITY AS [@@IDENTITY]
- GO
下面是结果集:
- ScopE_IDENTITY
- 21
- @@IDENTITY
- 21
Sales.Customer 表的最大标识值为 29483。如果在此表中插入一行,@@IDENTITY 和 ScopE_IDENTITY() 返回不同值。ScopE_IDENTITY() 从用户表中的插入内容返回值,而 @@IDENTITY 从复制系统表中的插入内容返回值。请对需要访问插入的标识值的应用程序使用 ScopE_IDENTITY()。
- INSERT INTO Sales.Customer ([TerritoryID],[CustomerType]) VALUES (8,'S')
- GO
- SELECT ScopE_IDENTITY() AS [ScopE_IDENTITY]
- GO
- SELECT @@IDENTITY AS [@@IDENTITY]
- GO
下面是结果集:
- ScopE_IDENTITY
- 24984
- @@IDENTITY
- 89
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。