2010-06-23 65 views
3

我有两个与外键链接的表。我需要在一个表上执行一些插入操作,然后使用标识列值作为下一批插入语句的一部分。这一切都必须通过SQL完成。我一直在阅读关于SCOPE_IDENTITY(),但我看到的所有示例都使用ASP/PHP /无论在下一批插入中做替换,我都没有这个选项。获取我刚刚插入的行的标识

任何指针赞赏。

回答

0

您可以对SQL或TSQL执行相同的操作。只要您插入,只需分配标识列。

0

您可以使用

SELECT SCOPE_IDENTITY() [Iden] 

在同一块插入语句之后。这应该工作。

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) 
1

使用

SCOPE_IDENTITY() - Function 

,而不是

@@IDENTITY Variable - 

否则,你得到最后插入的标识的结果 - 如果在桌子上的触发器比不插入某个地方你得到的错误的结果返回(由触发器插入的值而不是您的语句)。 Scope_Identity返回您的声明的身份,这正是您通常需要的。

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 

是什么让这个espcially可贵的是,如果你用它来插入了一系列的记录,而不是一个你可以得到所有的身份,您也可以返回任何你可能需要的其他领域。

类似:

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 
相关问题