08 Scop_Identity(),@@Identity,Ident_Current()的区别(What is the difference between Scope_Identity(),@@Identity, and Ident_Current?)

在StackOverflow上有一个帖子很好的解释了这三者之间的区别,本文将其大致意思翻译一下。读者也可以直接访问下面的链接查看原帖:http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide

  • Scop_Identity()函数返回的是同一个session 中的同一个scope的最后一个identity值。
  • @@Identity是一个变量,它返回的是同一个session中的最后一个identity值。
  • Ident_Current(‘tableName‘)函数返回的是所有session中的所有scope的最后一个identity值。

也就是说,Scop_Identity(),@@Identity,Ident_Current(‘tableName‘)的取值范围逐个增大的。

上面提到的session实际上就是一个数据库链接,scope就是当前查询(query)或者当前存储过程(stored procedure).

当你表中有一个触发器(trigger)的时候,在插入一条数据的时候,该触发器同时去插入另外一张表的数据时,Scop_Identity()和@@Session返回的值是不一样的。Scope_Identity()返回的是当前插入语句所产生的identity值,而@@Identity返回的是触发器插入数据时产生的identity值。

所以,大多数情况下我们使用的是Scop_Identity()函数。

时间: 2024-10-03 10:28:58

08 Scop_Identity(),@@Identity,Ident_Current()的区别(What is the difference between Scope_Identity(),@@Identity, and Ident_Current?)的相关文章

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操

Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑

判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍又一遍的告知: === 要求变量的类型和值均相等,才能返回true. 使用 === 来避免因JavaScript 类型转换带来的问题. 这样增加了 JavaScript 语法的灵活性但是也带来很多头疼的问题: 使用 ==/!=是 ===/!== 来判断两个变量是否相等? 为什么,JS 编码推荐使用

【ASP.NET Identity系列教程(二)】运用ASP.NET Identity

注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序的用户管理,以及实现应用程序的认证与授权等相关技术,译者希望本系列教程能成为掌握ASP.NET Identity技术的一份完整而有价值的资料.读者若是能够按照文章的描述,一边阅读.一边实践.一边理解,定能有意想不到的巨大收获!希望本系列博文能够得到广大园友的高度推荐. 14 Applying ASP

identity 列自动增长问题(SQL Server 2012 Auto Identity Column Value Jump Issue)

SqlServer2012中identity列存在一个特性: 当服务器重启时,定义为int的identity列会自动在原来最大值上加1000.例如你原来一个自增列中最大值是2,那你重启后插入一条数据到这个表中,你的这个自增列就会是1002了,在2008里就应该是3. 定义为bigint的identity列会自动在原来最大值上加10000.例如你原来一个自增列中最大值是2,那你重启后插入一条数据到这个表中,你的这个自增列就会是10002了,在2008里就应该是3. 详细请看以下链接: http:/

sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表最后生成的标识值. 语法 IDENT_CURRENT('table_name') 参数 table_name 是将要返回其标识值的表的名称.table_name 的数据类型为 varchar,没有默认值. 返回类型 sql_variant 注释 IDENT_CURRENT 类似于 Microsoft

SQL查询 [SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较)] ---转载

@@IDENTITY (Transact-SQL) 返回最后插入的标识值的系统函数. 备注 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值.如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL.如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值.如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将

IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比

原文:IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比 获取表的标识值,有3种比较常见的用法 IDENT_CURRENT ,@@identity,SCOPE_IDENTITY(),有啥不一样呢? 3个关键字在联机手册中的解释 IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值. @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值. SCOPE_IDENTITY() 返回为当前会话和当前作用域中的某个表

SQLServer获取最后插入的ID值SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值.IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表. @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值. SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值 也许大家对SQL Server中的 @@IDENTITY 都不陌生,都知道它是获取数据表中最后一条插入数据的IDENTITY值.比如,表 A 中有个 ID 为自增1的字段,假设此时 I

Identity和IdentityServer的区别及联系

关于Identity和IdentityServer初学的时候可能会有一些疑惑(虽然我也不是很精深吧),但是,这里说一下自己关于这两者的一些理解,如有错误,欢迎指正 总体上, ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer是一个中间件,它可以添加符合OpenID Connect和OAuth2.0的终端(endpoints)到一个任意的ASP.NET Core应用. 关于Identity ASP.NET Core Identity 是