也许大家对SQL Server中的 @@IDENTITY 都不陌生,都知道它是获取数据表中最后一条插入数据的IDENTITY值。
比如,表 A 中有个 ID 为自增1的字段,假设此时 ID 的值为100,现在如果我往表A插入一条数据,并在插入后
SELECT @@IDENTITY,则其返回 101,最后一条IDENTITY域(即ID域)的值。
现在问题来了,为什么说要慎用@@IDENTITY呢?原因是 @@IDENTITY 它总是获取最后一条变更数据的自增字段的值,
而忽略了进行变更操作所在的范围约束。比如,我有表 A 和表 B 两个表,现在我在表 A 上定义了一个Insert触发器,
当在表 A 中插入一条数据时,自动在表 B 也插入一条数据。此时,大家注意,有两个原子操作:在A中插入一条数据, 接着在B中随后插入一条数据。
现在我们想下,假设上面表 A 和表 B 都有IDENTITY自增域,那么我们在表 A 插入一条数据后,使用了
SELECT @@IDENTITY 输出时,输出的到底是 A 还是 B 的自增域的值呢? 答案很明显,是谁最后插入就输出谁,
那么就是 B 了。于是,我本意是想得到 A 的自增域值,结果得到了 B 的自增域值,一只 BUG 随之诞生,搞不好还
会影响到整个系统数据的混乱。
因此,对于这种情况,建议大家慎用 @@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之。SCOPE_IDENTITY()
也是得到最后一条自增域的值,但是它是仅限在一个操作范围之内,而不像 @@IDENTITY 是取全局操作的最后一步操作
所产生的自增域的值的。
- 浏览: 227757 次
- 性别:
- 来自: 南京
最新评论
-
张yyyyyy:
不明觉厉
一次sql 调优心得 -
masuweng:
某一类日期范围内每7天一组的销量之和,以及行转列 -
faradayroger:
[color=green][color=red][/color ...
定时JOB,去请求数据,并找出最新数据持久化 -
cainiao1923:
java-lxm 写道 写文章贴个图也不好好贴....难道是网 ...
spring 注入static属性 -
java-lxm:
写文章贴个图也不好好贴
spring 注入static属性
相关推荐
在SQL Server中,`@@IDENTITY`和`SCOPE_IDENTITY()`都是用来获取最近一次插入操作产生的标识列的值,但它们之间存在重要的区别。标识列通常是在表中自动生成的唯一序列号,用于记录每条记录的顺序。 `@@IDENTITY`是...
### SQL Server 中 SET IDENTITY_INSERT 的使用方法及注意事项 #### 标题与描述解析 在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)...
这个"car_identity.rar"压缩包中包含了相关的资源和信息,让我们深入探讨一下车牌识别系统的原理、应用以及关键技术。 首先,车牌识别系统的核心是图像处理和模式识别技术。在描述中提到,该系统能够处理BMP格式的...
标题中的"Biology_identity_arm.rar"揭示了我们讨论的主题,即一个利用ARM处理器实现的生物识别系统,其核心是通过生物特征进行个体识别。而“Identity_biometric system”和“识别”这两个标签进一步明确了该系统的...
### Set IDENTITY_INSERT 用法详解 在数据库管理与开发过程中,`SET IDENTITY_INSERT` 是一个非常实用的功能,主要用于允许或禁止手动插入带有 `IDENTITY` 属性的字段值。这一特性对于需要进行数据迁移或者特殊场景...
CCNP_Security_Identity_Management_SISE_300_715_Official_Cert_Guide
在sql语句后使用 SCOPE_IDENTITY() 当然您也可以使用 SELECT @@IDENTITY 但是使用 SELECT @@IDENTITY是去全局最新. 有可能取得值不正确. 示例: 代码如下:insert into dbo.SNS_BlogData(userName) values(‘jiangyun...
在标题中的“eap_identity.rar_EAP_Identity”,我们可以推测这是一个与EAP-Identity相关的源代码压缩包,其中可能包含了实现EAP-Identity协议的关键组件。 EAP-Identity是EAP协议的一种简单但重要的类型,主要用于...
为了避免这种情况,SQL Server提供了`SCOPE_IDENTITY()`函数,它返回的是在当前作用域内(即没有跨越存储过程或触发器的范围)最后生成的标识值。相比于`@@IDENTITY`,`SCOPE_IDENTITY()`更加安全,因为它确保返回的...
信息安全_数据安全_Building_Identity_for_an_Open_Perimeter 大数据 系统安全 系统安全 威胁情报 威胁检测
这个函数只返回当前范围内最后一个 `INSERT` 操作的结果,即使在同一会话中有多个 `INSERT` 操作,`SCOPE_IDENTITY()` 也只能返回最近一次 `INSERT` 的结果。 - **IDENT_CURRENT()**:返回指定表中最后插入的 `...
「Android」Identity_and_Access_Management_(IAM)_Emerging_Trends_and_Standards - 安全管理 法律法规 漏洞分析 安全资讯 安全培训 安全运维
这意味着即使在同一个连接中,如果存在多个嵌套的事务或存储过程调用,`SCOPE_IDENTITY()`仍然可以正确地返回当前作用域内的最后一条插入语句产生的标识值。 4. **IDENT_CURRENT()**:返回指定表中最后一条`...
「WEB应用防火墙」Identity_War_Games_A_Learning_Lab_on_Account_Opening_Fraud - 云安全 防火墙 安全集成 安全知识 安全测试 物联网安全
「安全活动」Downgradable_Identity-based_Encryption_and_Applications - 漏洞分析 区块链 勒索软件 安全研究 物联网安全 安全认证
「WEB应用防火墙」Blockchain_Based_Digital_Identity:Exploring_the_messy_space_between_promise_and_reality - 大数据 日志审计 开发安全 信息安全 安全研究 安全架构
identity_UseCookieAuthentication_SessionStore,redis实现的,asp.net mvc identity UseCookieAuthentication_ SessionStore
《美国红十字会品牌识别系统》是一份详细阐述该组织品牌形象和视觉标准的文档,主要关注VI(Visual Identity,即视觉识别系统)。这份手册详细规定了不同情境下使用红十字会标识的规则,以确保品牌一致性与专业性。 ...
IBE加密算法的入门文章Identity-Based Encryption from the Weil Pairing