惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
B
Blog
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
博客园 - Franky
V
V2EX
IT之家
IT之家
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
F
Fortinet All Blogs
I
InfoQ
云风的 BLOG
云风的 BLOG
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Microsoft Security Blog
Microsoft Security Blog

博客园 - today

赚钱和生活 Tnsping 和TCP/IP 中的ping 的區別 办公自动化漫谈培训有感 SQL Server 64 bit linked server Error with Sql server 32 bit 组合条件查询(初版) 合并DataGrid的单元格 浅谈反射与特性在接口系统中的应用(编码表转化) BuildSql增加了【生成数据库文档】的功能了 SQLServer2000辅助工具版本更新了 打造迅速响应的用户界面 我的SQL Server2000辅助工具 (翻译)从底层了解ASP.NET体系结构 (翻译)在C#中定义和使用自己的特性 搜索指定域名的小工具 (翻译)反射的第二部分:Emit (翻译)反射的第一部分:发现和执行 在SqlServer2000的视图中小心使用*符号 我眼中的程序员 一首打油诗
小心使用@@identity
today · 2008-01-09 · via 博客园 - today

@@identity的作用是返回最后插入的标识值,所以有很多朋友使用它来获取插入数据后的标识符。
但有一点是需要注意的,@@identity返回的是最后的标识符,所以,要想正确的返回插入后的标识符,那么就必须保证,你想要的结果是最后的标识符,否则就会隐藏bug。

仔细阅读@@identity的注释:

注释

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

在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。

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

例如:创建表t和t1

创建表t的触发器,作用是当有新的数据插入到表t时,t1也相应的插入一条数据。

然后,执行执行如下语句:

insert into t(name) values('me')
select @@identity

这时候,你期望得到的结果是1,但其实返回的结果却是10。

使用时,这就是你要注意的问题啦。
论坛支持:www.help-doc.com
相关知识可以参考:

http://www.help-doc.com/17/ShowForum.aspx