我有兩個與外鍵鏈接的表。我需要在一個表上執行一些插入操作,然後使用標識列值作爲下一批插入語句的一部分。這一切都必須通過SQL完成。我一直在閱讀關於SCOPE_IDENTITY(),但我看到的所有示例都使用ASP/PHP /無論在下一批插入中做替換,我都沒有這個選項。獲取我剛剛插入的行的標識
任何指針讚賞。
我有兩個與外鍵鏈接的表。我需要在一個表上執行一些插入操作,然後使用標識列值作爲下一批插入語句的一部分。這一切都必須通過SQL完成。我一直在閱讀關於SCOPE_IDENTITY(),但我看到的所有示例都使用ASP/PHP /無論在下一批插入中做替換,我都沒有這個選項。獲取我剛剛插入的行的標識
任何指針讚賞。
您可以對SQL或TSQL執行相同的操作。只要您插入,只需分配標識列。
您可以使用
SELECT SCOPE_IDENTITY() [Iden]
在同一塊插入語句之後。這應該工作。
-- 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)
使用
SCOPE_IDENTITY() - Function
,而不是
@@IDENTITY Variable -
否則,你得到最後插入的標識的結果 - 如果在桌子上的觸發器比不插入某個地方你得到的錯誤的結果返回(由觸發器插入的值而不是您的語句)。 Scope_Identity返回您的聲明的身份,這正是您通常需要的。
在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