在SQL Server 中如何得到刚刚插入的标识值

开这挖掘机赶集

开这挖掘机赶集

2016-02-19 18:18

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享在SQL Server 中如何得到刚刚插入的标识值吧。

  数据库实际应用中,我们往往需要得到刚刚插入的标志值来往相关表中写入数据。但我们平常得到的真的是我们需要的那个值么?

  有时我们会使用

  SELECT @@Identity

  来获得我们刚刚插入的值,比如下面的代码

  代码一:

usetempdb
if exists(select*fromsys.objectswhereobject_id=object_id(N'[test1]')andtypein(N'u'))
droptable[test1]
go
createtabletest1
(
  id      intidentity(1,1),
  content    nvarchar(100)
)
insertintotest1(content)
values('solorez')
select@@identity

  乐观情况下,这样做是没问题的,但如果我们如果先运行下面的代码二创建一个触发器、再运行代码三:

  代码二:
createtabletest2
(
  id      intidentity(100,1),
  content    nvarchar(100)
)
createtriggertri_test1_identitytest_I
ontest1afterinsert
as
begin
  insertintotest2
  selectcontentfrominserted
end

  代码三:

insertintotest1(content)
values('solorez2')
select@@identity

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  我们可以看到,此时得到的标识值已经是100多了,很明显,这是表test2的生成的标识值,已经不是我们想要的了。

  我们可以看看@@identity的定义:Identity

  原来,@@identity返回的是当前事务最后插入的标识值。

  这时我们或许会用下面的方法:

  代码四:

insertintotest1(content)
values('solorez3')
SELECT IDENT_CURRENT('test1')

  看来结果还比较正确,但如果我们在多次运行代码四的同时运行下面的代码五:

  代码五:

insertintotest1(content)
values('solorez3')
waitfordelay'00:00:20'
SELECT IDENT_CURRENT('test1')

  结果又不是我们想要的了!

  再看看IDENT_CURRENT(Tablename) 的定义:IDENT_CURRENT(Tablename)

  是返回指定表的最后标识值。

  到这里,是该亮出答案的时候了,我们可以使用下面的代码:

  代码六:

insertintotest1(content)
values('solorez3')
SELECT scope_identity()

  这时,我们无论是添加触发器还是运行并行插入,得到的始终是当前事务的标识值。

  scope_identity()的定义:scope_identity()

  PS:这是在添加触发器时,一个存储过程报错发现的问题,感觉有一定的普遍性,希望能给大家带来帮助。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

在SQL Server 中如何得到刚刚插入的标识值

编程语言 网络编程
在SQL Server 中如何得到刚刚插入的标识值

在SQL Server数据库中为标识(IDENTITY)列插入显式值

编程语言 网络编程
在SQL Server数据库中为标识(IDENTITY)列插入显式值

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Sql server 如何得到汉字的声母

SQLServer
Sql server 如何得到汉字的声母

将Session值储存于SQL Server中

编程语言 网络编程
将Session值储存于SQL Server中

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

.NET和SQL Server中“空值”辨析

电脑网络
.NET和SQL Server中“空值”辨析

如何用SQL Server查询累计值

SQLServer
如何用SQL Server查询累计值

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

CSS3系列教程:边框半径和圆角

CSS3系列教程:边框半径和圆角

恢复SQL2005误删除的数据

恢复SQL2005误删除的数据
下拉加载更多内容 ↓