获取我刚刚插入的行的标识

时间:2010-06-23 12:55:44

标签: sql sql-server database

我有两个与外键链接的表。我需要在一个表上执行一些插入,然后使用标识列值是我的下一批insert语句的一部分。这一切都必须通过SQL完成。

我一直在阅读有关SCOPE_IDENTITY()但我看到的所有示例都在使用ASP / PHP /无论在下一批插入中进行替换,我都没有这个选项。

任何指针都表示赞赏。

5 个答案:

答案 0 :(得分:1)

使用

SCOPE_IDENTITY() - Function 

而不是

@@IDENTITY Variable - 

否则你得到最后一个插入标识的结果 - 如果表上有一个触发器而不是插入某个地方你得到错误的结果(触发器而不是你的语句插入的值)。 Scope_Identity返回您的语句的标识,这是您通常想要的。

答案 1 :(得分:1)

在SQl Server 2008中,您还可以使用OUTPUT子句。

DECLARE @output TABLE (myid INT)

INSERT mytable (field1, field2)
    OUTPUT inserted.myid INTO @output
VALUES ('test', 'test')

SELECT * FROM @output

使这一点特别有价值的是,如果您使用它来插入一堆记录而不是一个可以获得所有身份的记录,您还可以返回您可能需要的任何其他字段。

类似的东西:

DECLARE @output TABLE (myid INT, field1 datetime)

INSERT mytable (field1, field2)
    OUTPUT inserted.myid, inserted.field1 INTO @output
Select '20100101', field3 from mytable2

SELECT * FROM @output

答案 2 :(得分:0)

您可以使用SQL或TSQL执行相同的操作。只需在插入后立即指定标识列。

答案 3 :(得分:0)

您可以使用

SELECT SCOPE_IDENTITY() [Iden] 

在同一个块中插入语句之后。这应该有用。

答案 4 :(得分:0)

-- Variable to hold new Id
Declare @NewId int

--Insert some values in to create a new ID
Insert Into dbo.MyTable1 (Col1)
Values (@NewValue)

-- Grab the new Id and store it in the variable
Select @NewId = Scope_Identity()

--Insert the new Id in to another table
Insert Into dbo.AnotherTable (Col1)
Values (@NewId)