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

查询当前插入数据的id
如何查询当前插入数据的id?

数据库sql server 2008,当然需考虑多用户的情况

先插入,然后获取@@identity?需要设置隔离以及锁么?感觉很怪

------解决方案--------------------
多用户并发的话不要用@@identity,可以看看我的文章:
http://blog.csdn.net/dba_huangzj/article/details/7685162
------解决方案--------------------
--不需要考虑隔离级别,SQL SERVER自己管理,高并发下也没问题(注意:事务回滚时会出现不连续现象)。参考如下
CREATE TABLE dbo.test
(
id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
NAME varchar(MAX)
)

--#1.每次插入1行
DECLARE @id int
INSERT INTO dbo.test(NAME) VALUES('name1')
SET @id = SCOPE_IDENTITY() --用这个取,万无一失。@@idenitty的话,还要考虑表上是否有触发器

--#2.每次插入N行
DECLARE @temp TABLE
(
id int NOT NULL PRIMARY KEY
)
INSERT INTO dbo.test(NAME)
OUTPUT INSERTED.id
INTO @temp(id)
SELECT 'name2' UNION ALL
SELECT 'name3' UNION ALL
SELECT 'name4'

SELECT * FROM @temp --3条记录自增的ID全部在这里面.