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
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
相关文章推荐
- [转] 获取刚插入的数据的自增列ID——IDSCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较)
- 插入数据后, 获取该记录id的方法
- Sql Server插入数据并返回自增ID,@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的区别
- SQL SERVER 插入数据获取自增ID,SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较
- 如何插入一条记录获取插入后的自动增长ID列的方法.
- C#操作mysql数据库事务以及获取插入数据ID的方法
- JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值
- Oracle插入数据并获取自增长序列ID方法
- .net实现oracle数据库中获取新插入数据的id的方法
- 20110215 学习记录:ASP获取新添加数据的ID号 SELECT @@IDENTITY
- (转)利用JDBC获取新插入记录id的三种方法
- SQLServer 如何获取刚插入数据的Id号
- SQLServer 如何获取刚插入数据的Id号
- ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录
- Java获取最后插入MySQL记录的自增ID值方法
- VC++获取SQLSERVER 2008插入记录后的自增主键ID
- 【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
- 利用JDBC获取新插入记录id的三种方法
- JDBC获取新插入记录id的三种方法
- .net实现oracle数据库中获取新插入数据的id的方法