2010-06-23 218 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 
相關問題