日期:2014-05-17  浏览次数:20601 次

取刚插入记录的ID值
数据库: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
insert sql 数据库

------解决方案--------------------
用SCOPE_IDENTITY()呢
------解决方案--------------------
我这里有说http://blog.csdn.net/dba_huangzj/article/details/7685162
------解决方案--------------------
@@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