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

 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() 返回相同的值。

 

 

  1. USE AdventureWorks;  
  2. GO  
  3. INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')  
  4. GO  
  5. SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]  
  6. GO  
  7. SELECT @@IDENTITY AS [@@IDENTITY]  
  8. GO  
  9.  

 

下面是结果集:

 

  1. SCOPE_IDENTITY  
  2. 21  
  3. @@IDENTITY  
  4. 21 

 

    Sales.Customer 表的最大标识值为 29483。如果在此表中插入一行,@@IDENTITY 和 SCOPE_IDENTITY() 返回不同值。SCOPE_IDENTITY() 从用户表中的插入内容返回值,而 @@IDENTITY 从复制系统表中的插入内容返回值。请对需要访问插入的标识值的应用程序使用 SCOPE_IDENTITY()。

 

  1. INSERT INTO Sales.Customer ([TerritoryID],[CustomerType]) VALUES (8,'S')  
  2. GO  
  3. SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]  
  4. GO  
  5. SELECT @@IDENTITY AS [@@IDENTITY]  
  6. GO 

 

下面是结果集:

 

  1. SCOPE_IDENTITY  
  2. 24984  
  3. @@IDENTITY  
  4. 89  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值