【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号

摘要:
@@IDENTITY返回当前会话所有作用域中任何表的最后生成的标识值。SCOPE_ IDENTITY返回当前会话中任何表的上一次生成的标识值SCOPE,而当前SCOPE_ IDENTITY和@@IDENTITY则返回在当前会话中的任何表中生成的上一个标识值。SCOPE_ IDENTITY只返回插入当前作用域的值;
转自http://blog.csdn.net/wangji163163/archive/2008/05/09/2424191.aspx

转载 在SQL Server中如何获得刚插入一条新记录的自动ID号收藏

--------------------------------------------------------------- 
使用[IDENT_CURRENT] 
用法:SELECT  IDENT_CURRENT('TABLENAME') 
--------------------------------------------------------------- 
SELECT  IDENT_CURRENT('TableName')  --返回当前的最后自动编号 
SELECT  IDENT_INCR('TableName')--返回增量值 
SELECT  IDENT_SEED('TableName')--返回种子值  

返回下一个自动编号: 
SELECT  IDENT_CURRENT('TableName')  +  (SELECT  IDENT_INCR('TableName'))

--创建数据库和表
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张create database MyDataBase
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张use MyDataBase
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张create table mytable
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张(
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张id
int identity(1,1),
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张name varchar(
20)
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张)
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张
--执行这个SQL,就能查出来刚插入记录对应的自增列的值
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张insert into mytable values(
'李四')
【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号第2张select @@identity

SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

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('T1') 和 IDENT_CURRENT('T2') 返回的值分别是这两个表最后自增的值。

ajqc的实验:(40条本地线程,40+40条远程线程同时并发测试,插入1200W行),得出的结论是:
1.在典型的级联应用中.不能用@@IDENTITY,在CII850,256M SD的机器上1W多行时就会并发冲突.在P42.8C,512M DDR上,才6000多行时就并发冲突.
2.SCOPE_IDENTITY()是绝对可靠的,可以用在存储过程中,连触发器也不用建,没并发冲突

SELECT   IDENT_CURRENT('TableName')   --返回指定表中生成的最后一个标示值  
SELECT   IDENT_INCR('TableName')--返回指定表的标示字段增量值
SELECT   IDENT_SEED('TableName')--返回指定表的标示字段种子值

返回最后插入记录的自动编号
SELECT IDENT_CURRENT('TableName')
返回下一个自动编号:  
SELECT   IDENT_CURRENT('TableName')   +   (SELECT   IDENT_INCR('TableName'))

SELECT @@IDENTITY --返回当前会话所有表中生成的最后一个标示值

免责声明:文章转载自《【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于GIT合并出错的记录JDBC常用驱动和语法汇总下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错

  R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错 笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集、测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证。 模型预测效果评价,通常用相对绝对误差、平均绝对误差、根均方差、相对平方根误差等指标来衡...

通过JS解析XML字符串

IE跟FireFox都有一个onload()方法来加载XML文件,而加载XML字符串时,IE下有onloadXML()方法,FireFox下并没有此方法,所以FireFox下要将XML字符串解析成DOM对象,必须使用DOMParser对象 domParser = new  DOMParser();xmlDoc = domParser.parseFromS...

通过http方式 post天气,并合成语音

# coding=utf-8 import sys import json import pygame import time IS_PY3 = sys.version_info.major == 3 if IS_PY3: import requests from urllib.request import urlopen fro...

数据可视化之DAX篇(二十四)Power BI应用技巧:在总计行实现条件格式

https://zhuanlan.zhihu.com/p/98975646 如何将表格或者矩阵中值的条件格式也应用于总计行? 目前PowerBI并不支持这种功能,无法在总计行或者小计行上应用条件格式,不过我们可以摸索个变通的方式来实现。 以制作红绿灯效果这篇文章的数据为例: PowerBI小技巧:简单两步实现红绿灯、箭头效果   这个总计行显然没有应用...

实战二(上):程序出错该返回啥?NULL、异常、错误码、空对象?

我们可以把函数的运行结果分为两类。一类是预期的结果,也就是函数在正常情况下输出的结果。一类是非预期的结果,也就是函数在异常(或叫出错)情况下输出的结果。比如,在上一节课中,获取本机名的函数,在正常情况下,函数返回字符串格式的本机名;在异常情况下,获取本机名失败,函数返回 UnknownHostException 异常对象。 在正常情况下,函数返回数据的类...

python基础学习-TCP的粘包问题

一、什么是粘包(粘包问题的原因) 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 只有TCP有粘包现象,UDP永远不会粘包,tcp的客户端与服务端进行通信的时候是以一种数据流的形式, 首先需要掌握一个socket收发消息的原理: 服务端把要发送的数据送到服务端的缓存,通过网卡把数据从服务端的缓存到客户端的缓存...