来自多个插入的身份

时间:2011-09-29 14:36:45

标签: sql-server

我想我已经知道答案但是......

鉴于此声明:

Insert Into Allergy (Name, Category, Composition)
Select Name, Category, Composition
From ETVault Where Strain In (6, 2, 4)

是否可以获取插入的身份?

我知道我可以将其分解为多个语句并在每个语句之后捕获scope_identity(),但这不是我所要求的。

1 个答案:

答案 0 :(得分:1)

我想到的第一种方法是在表上使用AFTER INSERT TRIGGER,捕获插入的整个行集,并从那里获取标识。

编辑当然,你可以通过捕获OUTPUT(doh)来做到这一点

http://msdn.microsoft.com/en-us/library/ms177564.aspx

这是一个工作示例,由于您没有提供示例数据,我创建了自己的Allery和ETVault表,因此请在全新的数据库中使用该示例。

DROP TABLE Allergy
GO
CREATE TABLE Allergy
(
ID INTEGER IDENTITY (1, 1), NAME VarChar (20), Category VarChar (20), Composition VarChar (20)
)
GO
DROP TABLE ETVault
Go
CREATE TABLE ETVault 
(
ID INTEGER IDENTITY (1, 1), Strain INT, NAME VarChar (20), Category VarChar (20), Composition VarChar (20)
)
GO
INSERT INTO dbo.ETVault
        ( Strain, NAME, Category, Composition )
VALUES  
( 1, '1',  '1',  '1'),
( 2, '1',  '1',  '1'),
( 3, '1',  '1',  '1'),
( 4, '1',  '1',  '1'),
( 5, '1',  '1',  '1'),
( 6, '1',  '1',  '1'),
( 7, '1',  '1',  '1'),
( 8, '1',  '1',  '1')

DECLARE @CaptureTable TABLE (ID INT)


INSERT INTO dbo.Allergy
        ( NAME, Category, Composition )
OUTPUT INSERTED.Id INTO @CaptureTable
SELECT dbo.ETVault.NAME, Category, Composition
FROM dbo.ETVault
Where Strain In (6, 2, 4)


SELECT * FROM @CaptureTable

它为您提供输出

(8 row(s) affected)

(3 row(s) affected)
ID
-----------
1
2
3

(3 row(s) affected)