在SQL SERVER中获取系统生成的标识值

sql server获得新记录标识列值的二种方法 有时开发需要我们需把新插入的记录之后立即返回插入记录的ID哦,下面给大家介绍mssqlserver返回新添加的记录的标识列的值sql语句 立即下载

在SQL SERVER中可以使用三种方法来获取系统生成的标识值:
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。

  • @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
  • SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
  • IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。 

@@IDENTITY

返回最后插入的标识值。

语法
@@IDENTITY

返回类型
numeric

注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

如果在你进行insert操作的时间和检查@@IDENTITY的时间之间有另一个insert操作被执行,@@IDENTITY返回的不是系统为你的insert所生成的标识值,而是它为最近的一个insert操作所生成的标识值。

SCOPE_IDENTITY

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

语法
SCOPE_IDENTITY( )

返回类型
sql_variant

注释
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 值。
建议使用这个方法获取系统生成的标识值,因为这是一种最安全的确定你最近生成的标识值的方法。

IDENT_CURRENT

返回为任何会话和任何作用域中的指定表最后生成的标识值。

语法
IDENT_CURRENT('table_name')

参数
table_name

是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。

返回类型
sql_variant

注释
IDENT_CURRENT 很类似于标识函数 SCOPE_IDENTITY ,但是IDENT_CURRENT 只会返回指定表的标识值,不管对其他的表是否进行过insert操作,这样可以防止深藏在触发器中的另一个insert操作影响到这个函数的返回结果。

 
银河麒麟V10ServerSP3中安装Nacos2.4.x详细教程 阅读详情

相关推荐

3D Slicer中安装MedSAM插件

大家应该都读过这篇论文:《Segment Anything in Medical Images》这个插件便是该论文团队推出的在3D Slicer上使用的插件,可以分割医学图像的任何感兴趣区域。

m0_73719342的博客 2331

sqlServer 查询数据库的标识列

--查询数据表的所有列 select c.name as 列名 from dbo.sysobjects tinner join sys.identity_columns c on t.id = c.object_id where t.xtype = 'U'

liufeifeinanfeng的博客 885

电脑版微信多开,最详细教程没有之一

首先桌面任意的位置右键新建文本文档输入如下代码: TASKKILL /F/IM WECHAT.EXE start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" ...

大超子 4390

T-SQL获取标识值

--获得整个系统提供的最新标识值(受触发器的影响) select @@identity; --获取当前作用域中最新生成的标识值(推荐使用) select scope_identity();

分享代码,分享idea! 919

Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门

莉莉丝游戏-Golang后端开发-中台部门 开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。 聊项目,介绍IM架构以及使用Go写的服务简介 动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的? 如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等 如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点 消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK 发送失

xmcy001122的专栏 3899

Sql Server中如何准确获得标识值

       SQL Server有三种不同的函数可以用来获得含有标识列的表里最后生成的标识值:   @@IDENTITY   SCOPE_IDENTITY()   IDENT_CURRENT(数据表名)   以上三个函数虽然都可以返回数据库引擎最后生成插入标识列的值,但是根据插入行的来源(例如:存储过程或触发器)以及插入该行的连接不同,这三个函数

云中客的专栏 2295

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 397

SQLServer数据库DBCC CHECKIDENT命令介绍

在SQLServer输入数据时,碰到有主键ID需要维护时,可使用IDENT_CURRENT和CHECKIDENT命令来维护。 IDENT_CURRENT命令返回指定表或视图生成的最后一个标识值。用法如下: IDENT_CURRENT('table_name') 返回类型numeric(38,0). DBCC CHECKIDENT命令用于检查或指定当前表/视图的标识值。用法如下: DBCC C...

三五月儿的专栏 7850

RedHat 9 替换yum源镜像

引言:我们个人通常使用的红帽系统yum源是需要注册付费的,所以在使用yum源安装一些软件时无法正常安装(例如:MySQL),这时我们就需要将yum源替换为CentOS对应的源,以实现在红帽系统中正常安装软件。

YUJIAOZHU666的博客 3738

由JavaScript版迷宫游戏引出Java版迷宫地图生成器

Java案例:迷宫地图生成器 一、引入问题 本期18软件1班网页脚本实训项目是完成一个JavaScript版迷宫游戏。 迷宫地图是如何生成的呢?很简单,将一个正方形区域等分为若干行与若干列,比如25行25列,这样就有625个单元格,用一个二维数组map[25][25]就可以保存625个单元格信息,map[i][j] = 1表示该单元格要绘制砖,而map[i][j] = 0表示该单元格不绘制砖。 ...

howard2005的专栏 1473

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

SQL SERVER 2000 中的标识值获取函数 IDENTITY(标识)列,也有很多人称之为自增列,在SQL Server 2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有关的函数的一个示例说明     SQL Server 中,可以使用 SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT() 来取得最后插入记录

盐碘 1275

基于Qt C++开发一款国产化的福昕风格PDF编辑工具

QString text = QInputDialog::getText(this, "文本批注", "输入批注内容:", QLineEdit::Normal, "", &ok);QString savePath = QFileDialog::getSaveFileName(this, "保存加密PDF", "", "PDF文件 (*.pdf)");QAction* zoomInAct = new QAction(QIcon::fromTheme("zoom-in"), "放大", this);

寒寒豆豆软件公司的博客 237

SQL Server标识列

[转] 一、标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。由于以上特点,使得标识列在数据库的设计中得到广泛的使用。二、标识列的组成创建一个标识列,通常要指定...

weixin_33841503的博客 2824

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SQL Server中如何获取刚插入的标识值 [转贴]

数据库实际应用中,我们往往需要得到刚刚插入的标志值来往相关表中写入数据。但我们平常得到的真的是我们需要的那个值么?有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值,比如下面的代码 代码一:use tempdbif exists (select * from sys.objects where object_id = object_id(N'[test1]') and t...

Corrinejtt 316

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SQL Server 中的标识符

标识符     SQL Server 2005 联机丛书 数 据库对象的名称即为其标识符。Microsoft SQL Server 2005 中的所有内容都可以有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束及规则等)都可以有标识符。大多数对象要求有标识 符,但对有些对象(例如约束),标识符是可选的。对象标识符是在定义对象时创建

eako的专栏 7041

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

在SQL Server中重置标识列值

If you are using an identity column on your SQL Server tables, you can set the next insert value to whatever value you want. An example is if you wanted to start numbering your ID column at 1000 inste...

culul01313的博客 449

SQL Server的标识列

在上面语法中, seed 是表中的第一行的值(第一条记录标识列使用的值)。 increment 是添加到上一行标识值的增量值。 seed 和 increment 的默认值是 1 ,即 (1,1) 。 表示加载到表中的第一行的值为: 1 ,第二行的值为: 2 (在上一行: 1 的基础上加 1 ),依此类推。 假设,希望第一行的标识列的值为 10 ,增量值为 2 ,可使用以下语法: IDENTITY (10,2) SQL Server允许每个表只有一个标识列。 创建一个名为 hr 的新模式用来.

weixin_55071724的博客 1965

SQL server合法标识符

~~ SQL server合法标识符 ~~ 数据库名是一个标识符,表名也是一个标识符,在SQL SERVER中标识符分为两类: 标识符有两类: 1.常规标识符 符合标识符的格式规则。在 Transact-SQL 语句中使用常规标识符时不用将其分隔。 SELECT *FROM TableXWHERE KeyCol = 124 2.分隔标识符 包含在双引号 (") 或者方括号 ([ ]) 内。符合标识...

随心所欲的便笺 5301

SQL server 中的插入表行数据,以及插入标识值

语法介绍 (1)在SQL server数据库中我们如何添加新的行,并且添加数据呢? Insert:该语句向表中添加新行 values: 要插入的值 语法如下: Insert into 模式.表名(字段名,字段名……) values(值1,值2,…..) 如果我们要插入多个值就要用“逗号”把它们分开 注意:我们一次最多可以插入1000个值 语法如下: Insert into 模式.表名(字段名,字段名…..) values (值1,值2…..),(值1,值2…..),(值1,值2……)

weixin_57746257的博客 8462
上一篇: asp。net安全验证详解
下一篇: VSTS学习笔记
dotnet90
博客等级 码龄23年 102粉丝 413原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值