您的位置:首页 > 数据库 > SQL

SQLserver 获取数据表新插入记录ID方法---SCOPE_IDENTITY与@@INDENTITY的区别

2011-03-14 16:55 633 查看
 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  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlserver go 数据库