SCOPE_IDENTITY和@@IDENTITY的用法

SCOPE_IDENTITY和@@IDENTITY的用法SCOPE_IDENTITY和@@IDENTITY的用法

SCOPE_IDENTITY
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

语法
SCOPE_IDENTITY( )

返回类型
sql_variant

注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

有关说明,请参见示例。

示例
下列示例将创建两个表 TZ 和 TY,并在 TZ 上创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。


1 USE tempdb
2 GO
3 CREATE TABLE TZ (
4 Z_id int IDENTITY(1,1)PRIMARY KEY,
5 Z_name varchar(20) NOT NULL)
6
7 INSERT TZ
8 VALUES ('Lisa')
9 INSERT TZ
10 VALUES ('Mike')
11 INSERT TZ
12 VALUES ('Carla')
13
14 SELECT * FROM TZ
15
16 --Result set: This is how table TZ looks
17 Z_id Z_name
18 -------------
19 1 Lisa
20 2 Mike
21 3 Carla
22
23 CREATE TABLE TY (
24 Y_id int IDENTITY(100,5)PRIMARY KEY,
25 Y_name varchar(20) NULL)
26
27 INSERT TY (Y_name)
28 VALUES ('boathouse')
29 INSERT TY (Y_name)
30 VALUES ('rocks')
31 INSERT TY (Y_name)
32 VALUES ('elevator')
33
34 SELECT * FROM TY
35 --Result set: This is how TY looks:
36 Y_id Y_name
37 ---------------
38 100 boathouse
39 105 rocks
40 110 elevator
41
42 /*Create the trigger that inserts a row in table TY
43 when a row is inserted in table TZ*/
44 CREATE TRIGGER Ztrig
45 ON TZ
46 FOR INSERT AS
47 BEGIN
48 INSERT TY VALUES ('')
49 END
50
51 /*FIRE the trigger and find out what identity values you get
52 with the @@IDENTITY and SCOPE_IDENTITY functions*/
53 INSERT TZ VALUES ('Rosalie')
54
55 SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
56 GO
57 SELECT @@IDENTITY AS [@@IDENTITY]
58 GO
59
60 --Here is the result set.
61 SCOPE_IDENTITY
62 4
63 /*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/
64
65 @@IDENTITY
66 115
67 /*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/
68
69
请参见
自己写的一段测试代码


1
2 use pubs
3 go
4
5 create table tx
6 (
7 xid int identity(1,1) primary key,
8 xname varchar(50)
9 )
10 go
11
12 insert into tx values ('aaa')
13 insert into tx values ('bbb')
14 insert into tx values ('ccc')
15
16 select * from tx
17
18 create table tz
19 (
20 zid int identity(1,1) primary key,
21 zname varchar(50)
22 )
23 go
24
25 insert into tz values ('AAA')
26 insert into tz values ('BBB')
27 insert into tz values ('CCC')
28 insert into tz values ('DDD')
29 insert into tz values ('EEE')
30 insert into tz values ('FFF')
31
32 select * from tz
33
34 create trigger xztrig on tx
35 after insert
36 as
37 begin
38 insert into tz values ('gongxu')
39 end
40 go
41
42 insert into tx values ('myname')
43
44 SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
45 GO
46 SELECT @@IDENTITY AS [@@IDENTITY]
47 GO
48
49 select * from tx
50 select * from tz

返回值为:

SCOPE_IDENTITY
---------------------------------------
4

(1 行受影响)

@@IDENTITY
---------------------------------------
7

(1 行受影响)


下面分别是两个表中的数据:


xid xname
----------- --------------------------------------------------
1 aaa
2 bbb
3 ccc
4 myname

(4 行受影响)

zid zname
----------- --------------------------------------------------
1 AAA
2 BBB
3 CCC
4 DDD
5 EEE
6 FFF
7 gongxu

(7 行受影响)
[特殊字符] RK3588 平台上基于 Panfrost 的 Mesa 驱动编译全过程 摘要: 本文详细记录了在RK3588平台(Ubuntu 20.04 aarch64)上编译基于Panfrost的Mesa驱动的全过程。内容包括:1)系统依赖安装;2)libdrm编译;3)Mesa配置参数优化;4)LLVM 15与SPIRV工具链的安装方法;5)SPIRV-Tools版本问题的解决方案;6)最终编译命令及常见错误处理。关键点在于正确设置工具链路径(PKG_CONFIG_PATH)和版本匹配(LLVM 15对应SPIRV-LLVM-Translator v15.0.0),推荐将组件安装在/op 阅读详情

相关推荐

ChatGPT Web转API工具:原理、部署与集成实战

在AI应用开发中,API(应用程序编程接口)是实现系统间通信和数据交换的核心技术,它通过标准化的请求响应机制,将复杂功能封装为可编程的服务。其工作原理基于HTTP协议,通过定义清晰的端点、方法和数据格式,使不同平台的应用能够高效集成AI能力。这一技术价值在于极大降低了开发门槛,促进了自动化流程和智能功能的快速落地,广泛应用于智能客服、内容生成和创意辅助等场景。本文聚焦于如何通过浏览器自动化技术,将ChatGPT的Web界面能力转化为标准API服务,其中涉及Playwright无头浏览器操作和会话Cookie

weixin_42533910的博客 1767

如何获取最近插入一条数据的自增id

可以用SCOPE_IDENTITY:IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。下面的是sql联机帮助SCOPE_IDENTITY返回插入到同一作用域中的 IDENTITY 列内的最后一个 ID

1919

瑞萨RH850/U2A8以太网模块mcal说明

如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。

至道无难,唯嫌拣择。 1862

关于MS-SQL中的@@IDENTITY

关于MS-SQL中的@@IDENTITY分类:数据库基本知识1. IDENTITY 列不能由用户直接更新,它是由系统自动维护的。 2.该列数据类型必须为数值型:int, smallint, tinyint, decimal or numeric with scale 0。 3.该列不能为 null。 4.不能在该列上设置缺省值。 5.递增量只能为整形(比如:1,2,-3)。不能为小

sgear 3007

SolidWorks+ADAMS双验证:你的机械臂力矩计算真的靠谱吗?

本文探讨了机械臂力矩计算中手工计算的局限性,并介绍了SolidWorks和ADAMS双验证方法的重要性。通过实际案例展示了动态工况下传统计算方法的误差,详细解析了SolidWorks精准质心捕捉和ADAMS动力学仿真的关键技术,帮助工程师构建计算-仿真-实测闭环验证流程,确保机械臂设计的可靠性和安全性。

grafana6viz的博客 228

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

SCOPE_IDENTITY与@@IDENTITY

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

tibaloga 164

PostgreSQL核心原理:数据库崩溃恢复的唯一真相详解

PostgreSQL崩溃恢复机制通过WAL日志确保数据一致性和持久性。核心流程包括:触发恢复(非正常关闭时)、读取控制文件获取检查点LSN、顺序扫描WAL日志进行Redo阶段重做已提交事务、利用MVCC标记未提交事务为ABORTED实现逻辑撤销,最后执行检查点完成恢复。该机制依赖WAL原子性、检查点锚点和无Undo的可见性模型三大支柱,保证即使系统崩溃也能恢复到逻辑一致状态。关键设计包括延迟写入、LSN顺序控制和FPW防部分写,最终通过确定性重放实现ACID特性。

数据知道的博客 2662

insert into 后获得自动插入的id(select @@identity)

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

pavel0的专栏 1983

【人工智能】国产开源大模型聊天 AquilaChat 快速开始上手实战&效果评测

Aquila语言大模型在技术上继承了GPT-3、LLaMA等的架构设计优点,替换了一批更高效的底层算子实现、重新设计实现了中英双语的tokenizer,升级了BMTrain并行训练方法,在Aquila的训练过程中实现了比Magtron+DeepSpeed zero-2将近8倍的训练效率。Aquila语言大模型是在中英文高质量语料基础上从0开始训练的,通过数据质量的控制、多种训练的优化方法,实现在更小的数据集、更短的训练时间,获得比其它开源模型更优的性能。

AI天才研究院 2万+

点云中概念:匹配、配准、融合

匹配,是寻找与一幅图相似的图像(不对寻找到的图像做矫正)。 配准,是寻找相似图像但是变形后的图像(需要做一些旋转之类的校正变换)。 融合,是多幅图像连接成一幅大图,视频集成中用的比较多。 1)匹配: 2)配准: 比如由于固定式激光雷达受测量方式的限制和被测物体集合形状的限制,固定的话一次只能扫描被测物体有限范围的点云数据(比如一个面??),这需要在多个视角下进行多次扫描(就是将激光雷达前后左右四个面都扫一下??对的),然而每个视角下得到点云数据都具有独立的坐标系,无法直接进行拼接(拼接就是将四个面

m0_37957160的博客 1万+

@@identity用法

今天在做一个小项目的过程中遇到了@@identity,到msdn中查了一下它的用法。 以下是msdn中@@identity的定义: 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENT...

5479

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1301

@@IDENTITY 的缺点 SCOPE_IDENTITY() 取而代之

      也许大家对SQL Server中的 @@IDENTITY 都不陌生,都知道它是获取数据表中最后一条插入数据的IDENTITY值。 比如,表 A 中有个 ID 为自增1的字段,假设此时 ID 的值为100,现在如果我往表A插入一条数据,并在插入后  SELECT @@IDENTITY,则其返回 101,最后一条IDENTITY域(即ID域)的值。  现在问题来了,为什么说要慎用@@IDE

Jerry Chou's Space 2497

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

scope_identity() mysql_@@IDENTITY与SCOPE_IDENTITY()

Sybase中不支持scope_identity在sybase中无IDENT_CURRENT函数,而是next_identity(table)在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTI...

weixin_29994587的博客 515

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

慎用@@IDENTITY,用SCOPE_IDENTITY()代替之

从msdn中,我们知道两者的定义是: @@IDENTITY: 返回最后插入的标识值的系统函数 SCOPE_IDENTITY():返回插入到同一作用域中的标识列内的最后一个标志值 使用@@IDENTITY时,如果插入语句触发了一个或多个触发器,而触发器又执行了生成标识值的插入操作, 那么,在插入语句后面调用@@IDENTITY时,获取到的就不是你所希望得到的值了。 我们来举个例...

weixin_30674525的博客 2020

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SCOPE_IDENTITY() @@IDENTITY

@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 作用域: 以下摘自网络:https://www.cnblogs.com/adandelion/archive/2010/08/25/1808244.html 1. SQL...

三摩提的博客 1641

oracle select @@identity,SQL区别@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT

预备知识:SQLServer的IDENTITY关键字IDENTITY关键字代表的是一个函数,而不是identity属性。在access里边没有这个函数,所以在access不能用这个语句。语法:identity(数据类型,标识种子,标识增长量)举例:select identity (数据类型,标识种子,标识增长量) AS 列名 into 新表 from 原表名每个表都可以有一个自动增长列,众所周知的...

weixin_39558317的博客 677

【mysql】SCOPE_IDENTITY 和 @@IDENTITY的区别

SCOPE_IDENTITY 和 @@IDENTITY 的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。 一个操作,一个触发器,一个存储过程叫做一个作用域。如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果。 示例: select SCOPE_IDENTITY() as ID

sayyy的专栏 1084

@@IDENTITY与SCOPE_IDENTITY()

@@IDENTITY与SCOPE_IDENTITY() 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了...

banyun2339的博客 308

SCOPE_IDENTITY 和 @@IDENTITY

<br />SCOPE_IDENTITY 和 @@IDENTITY 会传回目前工作阶段任何资料表中所产生的最後一个识别值。不过,SCOPE_IDENTITY 会传回只在目前范围内插入的值;@@IDENTITY 不限于特定范围。

chongyibo的专栏 430

浅谈SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY

1.IDENT_CURRENT() 【备注】:返回为指定的表或视图生成的最后一个标识值。所生成的最后一个标识值可以针对任何会话和任何作用域。 【语法】:IDENT_CURRENT('table_name') 【参数】:table_name 其标识值被返回的表的名称。tabl

Hero_ChenLiu的专栏 934

SCOPE_IDENTITY 和 @@IDENTITY 的区别

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 例如,有两个表 T1 和 T2,并且在 T1 上定义了 IN

diligentcat的专栏 617

@@IDENTITY 和 SCOPE_IDENTITY()

在ms sql server中一张表有自增长字段,最近插入表中记录的自增长字段可以通过@@IDENTITY或者SCOPE_IDENTITY()取得。 通常情况下@@IDENTITY 和 SCOPE_IDENTITY()可以起到同样的效果,但是也不尽然,他们两者之间还是有区别的。微软的文档上这...

choumudian9419的博客 178

SCOPE_IDENTITY和@@identity的区别

它们都返回插入到标识列中的值 SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 。 IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。调用它时必须提供表示表名的字符型参数,你可以得到你想要的任何表的最后一个IDENTITY值,即使你的代码里没有插入动作。

邓福勇 2183
上一篇: 企业类库--引用无效
下一篇: Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
pmandy
博客等级 码龄18年 13粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值