取刚插入记录的ID值

robake 2013-01-17 05:59:09
数据库:SQL2008

SET NOCOUNT ON;
Insert INTO VirusScanProd.dbo.SaasPolicies
(PolicyName,ContactID,PolicyOuterXml,PolicyType,CreatedBy,PartnerId,CreateDate,ModDate) Values
('aaaa',46,'',2,1,3,GETDATE(),GETDATE());
select @@IDENTITY


在上边的SQL Insert语句执行后,select @@IDENTITY返回的值是164400,检查了一下,VirusScanProd.dbo.SaasPolicies 这张表中总共才有1200多行记录,刚插入的那条记录的自增列值也仅是1250。
这里该如何取值?为什么有这么大的差异,是否是select @@IDENTITY用错了?

PS:VirusScanProd.dbo.SaasPolicies 表中的自增列叫PolicyID,并不是ID
...全文
1080 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2013-01-17
  • 打赏
  • 举报
回复
@@IDENTITY--不对 VirusScanProd.dbo.SaasPolicies此表应该是触发器 用SCOPE_IDENTITY、IDENT_CURRENT IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。 SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。 联机例子
CREATE TABLE TY (
   Y_id  int IDENTITY(100,5)PRIMARY KEY,
   Y_name varchar(20) NULL)

INSERT TY (Y_name)
   VALUES ('boathouse')
INSERT TY (Y_name)
   VALUES ('rocks')
INSERT TY (Y_name)
   VALUES ('elevator')

SELECT * FROM TY
--Result set: This is how TY looks:

/*Create the trigger that inserts a row in table TY 
when a row is inserted in table TZ.*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS 
   BEGIN
   INSERT TY VALUES ('')
   END

/*FIRE the trigger and determine what identity values you obtain 
with the @@IDENTITY and SCOPE_IDENTITY functions.*/
INSERT TZ VALUES ('Rosalie')

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO
發糞塗牆 2013-01-17
  • 打赏
  • 举报
回复
sbigwolf 2013-01-17
  • 打赏
  • 举报
回复
如果是过程。里面可以考虑使用output来解决问题
szm341 2013-01-17
  • 打赏
  • 举报
回复
@@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。 看看联机丛书吧,很详细的
robake 2013-01-17
  • 打赏
  • 举报
回复
这次正确了,select SCOPE_IDENTITY()与select @@IDENTITY有什么区别呢
szm341 2013-01-17
  • 打赏
  • 举报
回复
用SCOPE_IDENTITY()呢

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧