可以获得记录块插入的所有身份吗?

时间:2012-07-05 17:28:15

标签: sql-server-2008 tsql

考虑以下TSQL:

INSERT INTO Address(Street1, City, State, ZipCode)
SELECT Street1, City, StateCode, ZipCode
    FROM Contact

地址具有自动设置的标识列。有没有办法获得新插入的地址记录的身份列表?

我知道有@@ IDENTITY,但这只会返回最后一个身份。

1 个答案:

答案 0 :(得分:0)

假设标识列名为AddressID,您可以:

INSERT INTO dbo.Address(Street1, ...)
OUTPUT inserted.AddressID
SELECT Street1, ...
  FROM dbo.Contact;

或者:

DECLARE @NewAddresses TABLE(AddressID INT);

INSERT INTO dbo.Address(Street1, ...)
OUTPUT inserted.AddressID INTO @NewAddresses
SELECT Street1, ...
  FROM dbo.Contact;

请注意@@IDENTITY 几乎永远不会被使用。即使在处理单行插入时,SCOPE_IDENTITY()也更安全。有关更多背景信息,请参阅this answer