关于scope_identity()与 @@IDENTITY

参考:https://msdn.microsoft.com/zh-cn/library/ms190315.aspx

scope_identity()涉及作用域,
作用域定义:
 一个范围是一个模块:存储过程、触发器、函数或批处理。 因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

@@IDENTITY 返回一个会话内最后一次添加的Identity
 在企业管理器中开一个新建查询(标签页)表示建立了一个新的会话,在这个标签页内输入的所有sql语句是一个会话

上图中,不管什么时候单独选择后面2句执行,结果都是一样的

EF中每次执行查询或者Ctx.SaveChanges()会重置exec sp_reset_connection ,导致每次执行作为不同会话存在。

上面程序的返回值是null,因为ExecuteStoreQuery是另外的会话。

时间: 2024-10-06 04:39:03

关于scope_identity()与 @@IDENTITY的相关文章

scope_identity 和@@identity区别

当执行插入命令时,两者都可以返回所插入数据的Id,不同的是scope_identity是当前作用域,而@@identity是可以跨作用域的 例如: create table table1( Id int identity(1,1) primary key, Name nvarchar(32) ) create table table2( Id int identity(1,1) primary key, Name nvarchar(32) ) insert into table1 values(

SCOPE_IDENTITY() 和 @@identity

@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于特定的作用域. 例如,有两个表 T1 和 T2,并且在 T1 上定义了 INSERT 触发器.当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行. 该方案演示了两个作用域:在 T1 上的插入,以及在 T2 通过触发器的插入. 假设 T1 和 T2 都有标识列,@@IDENTITY 和 SC

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

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

@@IDENTITY与SCOPE_IDENTITY的用法

SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果.这时候我们要使用SCOPE_IDENTITY

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

T-SQL开发 - 10.IDENTITY属性使用小结

从SQL Server 2012开始有了Sequence,简单用列如下: CREATE SEQUENCE TestSeq START WITH 1 INCREMENT BY 1; SELECT NEXT VALUE FOR TestSeq AS NextValue; 在这之前,表中生成序列号大多都是借助IDENTITY列属性,当然也有一些时候,是在自定义表中,自己维护序列号. 一. 创建IDENTITY列 if OBJECT_ID('test','U') is not null     drop

10. IDENTITY属性使用小结

从SQL Server 2012开始有了Sequence,简单用列如下: CREATE SEQUENCE TestSeq START WITH 1 INCREMENT BY 1 ; SELECT NEXT VALUE FOR TestSeq AS NextValue; 在这之前,表中生成序列号大多都是借助IDENTITY列属性,当然也有一些时候,是在自定义表中,自己维护序列号. 一. 创建IDENTITY列 if OBJECT_ID('test','U') is not null drop ta

Insert后返回自动插入的生成的ID:select @@identity

当运行完插入语句后,执行select @@identity就可得到自动生成的id 如果是sql server 最好用:select SCOPE_IDENTITY() as id因为@@identity全局的 同类还有IDENT_CURRENT(‘table’) IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值.IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表.@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值.SCOPE

SCOPE_IDENTITY的用法【转载】

SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果.这时候我们要使用SCOPE_IDENTITY