@@IDENTITY 是否总能保证插入语句执行后的ID是正确的?

18 篇文章 0 订阅
15 篇文章 0 订阅

这两天CSDNBlog问题不断啊!今天venjiang老大忙里偷闲去群里骂我们, 搞了个难题考我们。出题如下:

@@IDENTITY 是否总能保证插入语句执行后的ID是正确的?(这描述的不清晰哦,云里雾里的揣摩老大的意思ing....)

我想了想(因为我们一直使用inser into table ,select @@IDENTITY 这样的语句返回插入的数据ID,并且从没碰到过返回的ID与数据不匹配的情况),说:能,没碰到过不正确的时候!

venjiang接着说:如果数据访问很频繁,会不会出现我这边执行时,返回的是你那边插入的ID?

我想了一下说:不会。

venjiang就给我发了一段:@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函数,因为他们都返回插入到表的 IDENTITY 列的最后一个值。

@@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

细细一看,感觉使用@@IDENTITY还真没准会出现venjiang说的那种情况!

接着venjiang给我发了一个触发器:(不巧插入代码有错误,只好直接粘贴代码了)

CREATE TABLE t6(id int IDENTITY);
CREATE TABLE t7(id int IDENTITY(100,1));
GO
CREATE TRIGGER t6ins ON t6 FOR INSERT
AS
BEGIN
   INSERT t7 DEFAULT VALUES
END;
GO
--End of trigger definition

SELECT   * FROM t6;
--id is empty.

SELECT   * FROM t7;
--ID is empty.

--Do the following in Session 1
INSERT t6 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This was inserted by the trigger.*/

从这个触发器代码看,结合对@@IDENTITY的介绍,看来某些情况下@@IDENTITY返回ID的还真可能牛头不对马嘴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值