关于scope_identity()与 @@IDENTITY

原文:关于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是另外的会话。

 

 

如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。 即使未提交试图向表中插入值的事务,也永远无法回滚标识值。 例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。

时间: 2024-10-31 08:39:12

关于scope_identity()与 @@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

SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY

昨天有人在群里讨论SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT.@@IDENTITY.SCOPE_IDENTITY,在些作个标记和小结. 其实MSDN对此有官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的"最后"的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值. 如果 IDENT_CURRENT 值为 NULL(因为表从未包含行或已被截断),IDENT_CURRENT

10. IDENTITY属性使用小结

原文: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

SCOPE

比较 http://blog.joycode.com/ghj/archive/2004/03/21/16745.aspx SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值. IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值.IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表.IDENT_CURRENT

SQL SERVER 2000 中的标识值获取函数

server|函数 IDENTITY(标识)列,也有很多人称之为自增列,在SQL Server 2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有关的函数的一个示例说明     SQL Server 中,可以使用 SCOPE_IDENTITY(). @@IDENTITY . IDENT_CURRENT() 来取得最后插入记录的值值,它们的区别在于:SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值.一个

Sql Server中如何取得刚刚插入的自增长的id值

  我们知道,许多表的主键id是自增的,那么我们需要拿到插入过后那个插入的那条记录的id怎么办? 我们先看网上这样一种办法:   测试: 1.新建一个表  TBLINDEDITY   CREATE TABLE [TBLINDEDITY] (      [id] [int] IDENTITY (1, 1) NOT NULL ,      [name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL      ) ON [PRIMARY]   GO 2.插入3条

T-SQL开发——ID处理篇

原文:T-SQL开发--ID处理篇 数据库自增ID功能中Identity.Timestamp.Uniqueidentifier的区别: 问题现象: 一般序号的产生,对于一般程序员而言,都是使用T-SQL命令来实现.先读取表中的最大需要,然后累加一,再插回数据库,这样做是相当危险的.因为如果事务机制没有处理好,就会出现同时间内取得同一序号.结果可想而知.为了避免这种情况,SQLServer在内部已经提供了一定的机制来协助处理. 说明: 在SQLServer中,支持多种自动产生序号的机制. 第一种是

存储过程遇到的问题~~查询不出来

问题描述 在存储过程中定义变量 @CaseID varchar(256)AS SELECT*FROM 表xxx WHERE 字段ID like '%'+rtrim(@ID)+'%'我数据库里的ID是12345,我已经测试过,上面的代码效果是: 输入1 或12 或23 或34 或123 或2345 或345 等等, 只要是顺着排下来的输入条件都能查询到预期的结果,到此很圆满.可是,我想输入125,也就是不顺着数字输入,根据125这个查询条件,或者124,或者235,或者25, 隔开输入查询条件就查

【提问】插入数据后,如何获得编号【在线放分】

问题描述 插入一条数据到SQLSERVER当中数据表中的第一项是自动编号那么我们在插入数据后,如何获得这个生成的自动编号? 解决方案 解决方案二:selecttop1idfromtableorderbyiddesc解决方案三:http://topic.csdn.net/u/20080710/11/d1468a96-a8e4-4b68-a151-cd38541d7c68.html解决方案四:自动编号只增补渐吗?数据条目很多后,编号会出现循环的情况的吗?解决方案五:自动编号只增补渐吗?是的数据条目很