澳门网络娱乐游戏平台-澳门电子游戏娱乐网址-官方直营

[转发]T-SQL:插入并赶回自增ID

先是会见数据库里面的数量(S_Id为自拉长标记列):

澳门大富豪网站平台 1

 源地址:

sql server 中回到上二回插入数据的ID(标志值)有二种办法:

SQL Server 2001中,有多个相比较周围的功效:他们各自是:SCOPE_IDENTITY、IDENT_CU昂CoraRENT 和 @@IDENTITY,它们都回去插入到 IDENTITY 列中的值。

第一种 @@IDENTITY:

IDENT_CUHavalRENT 重回为任何会话和任何作用域中的特定表最生平成的标志值。IDENT_CUENVISIONRENT 不受功用域和对话的范围,而受限于钦点的表。IDENT_CUENCORERENT 重回为其它会话和作用域中的特定表所生成的值。
@@IDENTITY 重回为近年来对话的具备功能域中的任何表最后生成的标记值。
SCOPE_IDENTITY 再次来到为日前对话和脚下效率域中的任何表最终生成的标志值

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values('013','卫庄','男','185');
3 
4 select @@IDENTITY        -- 返回 17 

SCOPE_IDENTITY 和 @@IDENTITY 重回在眼下对话中的任何表内所生成的结尾多个标志值。可是,SCOPE_IDENTITY 只回去插入到如今效率域中的值;@@IDENTITY 不受限于特定的效能域。

@@IDENTITY能够回来当前接连几日全体范围内插入最后所生成的标记值(饱含另向外调运用的存款和储蓄进度和触发器卡塔尔国。这几个函数不只是足以适用于表。函数再次回到的值是最后表插入行生成的标志值。比如,以往有三个a表和三个b表,a表插入一条数据并触发 trigger (触发器)为b表插入一条数据,那时@@IDENTITY重回的实际是b表的标记列的值,因为@@IDENTITY它连接获取最终一条更动数据的自增字段的值。@@IDENTITY 重返为当前对话的装有成效域中的任何表最后生成的标志值。

比方说,有五个表 T1 和 T2,在 T1 上定义了几个 INSERT 触发器。当将某行插入 T1 时,触发器被激励,并在 T2 中插入意气风发行。此例表达了三个成效域:贰个是在 T1 上的插入,另三个是作为触发器的结果在 T2 上的插入。

第二种 IDENT_CURRENT:

假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将要 T1 上的 INSERT 语句的末段回来差异的值。

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values('014','大司命','女','183');
3 
4 select IDENT_CURRENT('Student')        --返回 18

@@IDENTITY 重临插入到当下对话中此外作用域内的最终四个 IDENTITY 列值,该值是插入 T2 中的值。

IDENT_CUEscortRENT(卡塔尔(قطر‎是四个函数,它有叁个参数,它的参数就是钦点要重返的标志列的值的表名。

SCOPE_IDENTITY(卡塔尔(قطر‎ 重返插入 T1 中的 IDENTITY 值,该值是爆发在相似效率域中的最终三个INSERT。要是在功效域中生出插入语句到标志列以前唤醒调用 SCOPE_IDENTITY(State of Qatar函数,则该函数将回到 NULL 值。

IDENT_CUGL450RENT(卡塔尔(قطر‎再次来到为其它会话和任何效率域中的特定表最后生成的标志值, 不受功效域和对话的限定,而受限于钦点的表。

而IDENT_CURRENT('T1') 和 IDENT_CULANDRENT('T2'卡塔尔国重临的值分别是那多个表最终自增的值。

第三种 SCOPE_IDENTITY:

ajqc的试验:(40条地点线程,40+40条长途线程同期现身测验,插入1200W行卡塔尔国,得出的下结论是:
1.在第一级的级联应用中.不能够用@@IDENTITY,在CII850,256M SD的机器上1W多行时就能够并发冲突.在P42.8C,512M DD奥迪Q3上,才6000多行时就并发冲突.
2.SCOPE_IDENTITY(State of Qatar是相对可相信的,能够用在积存进程中,连触发器也不用建,没并发冲突

1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
2 values('015','月儿','女','165');
3 
4 select SCOPE_IDENTITY()        --返回 19

SELECT   IDENT_CU卡宴RENT('TableName'卡塔尔   --再次回到钦赐表中生成的末梢二个标示值   
澳门大富豪网站平台,SELECT   IDENT_INCTucson('TableName'State of Qatar--重回内定表的标示字段增量值
SELECT   IDENT_SEED('TableName'卡塔尔--重临钦定表的标示字段种子值

SCOPE_IDENTITY(卡塔尔(قطر‎再次来到为当前对话和前段时间作用域中的任何表最生平成的标志值。贰个效率域正是叁个模块——存款和储蓄过程、触发器、函数或批管理。

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

 

SELECT @@IDENTITY --重回当前会话全体表中生成的最后三个标示值

IDENT_INCR 用法:

安顿数据的还要,重回ID值

1 -- IDENTITY(1,1) 第一个参数是表示,自增长的起始值,第二个参数表示自增长的增长量,即一次增长多少
2 SELECT IDENT_INCR('Student')    -- 返回 1 

 

SELECT IDENT_INCTiggo('TableName'),三个参数,'TableName' 表示钦命表的表名或视图名。

今天在做项目时,境遇插入数据的同一时候,重临ID值的难点,遂记录如下:

回去钦点表的标志字段的增量值(正是自增值,每插入一条新数值类别扩张的数值)。

      插入数据的还要,再次来到ID值的sql语句。

 

      MSSQL:

IDENT_SEED 用法:

           INSERT INTO test2 (aa)   VALUES ('cc')   SELECT @@IDENTITY AS SEQUENCE

1 -- IDENTITY(1,1) 第一个参数是表示,自增长的起始值,第二个参数表示自增长的增长量,即一次增长多少
2 select IDENT_SEED('Student')    --返回 1

       MYSQL:

本文由澳门网络娱乐游戏平台发布于数据库,转载请注明出处:[转发]T-SQL:插入并赶回自增ID

相关阅读