首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

取刚插入记录的ID值,该怎么处理

2013-01-26 
取刚插入记录的ID值数据库:SQL2008SET NOCOUNT ONInsert INTO VirusScanProd.dbo.SaasPolicies (PolicyNa

取刚插入记录的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

热点排行