2011-04-14 105 views
1

我们大概都知道SCOPE_IDENTITY()来检索单个插入生成的身份。目前,我在需要某种神奇的变量或函数来检索一个语句,如产生的所有行:有没有什么办法检索命令的插入行

INSERT INTO [dbo].[myMagicTable] 
(
    [name] 
) 
SELECT [name] 
FROM  [dbo].[myMagicSource] 
WHERE  /* some weird where-clauses with several subselects ... */; 

INSERT INTO [dbo].[myMagicBackupTable] 
(
    [id], 
    [name] 
) 
SELECT 
    [id], 
    [name] 
FROM ??? 

一个INSERT触发器是没办法,因为这将执行单个插入这一批10000行的问题... 那么,有什么办法可以实现这个目标吗? 我们正在使用mssql2005 <

回答

4

对于SQL Server 2005+,可以使用OUTPUT子句。

DECLARE @InsertedIDs table(ID int); 

INSERT INTO [dbo].[myMagicTable] 
    OUTPUT INSERTED.ID 
     INTO @InsertedIDs 
    SELECT ... 
+0

+1 darn - 击败我60秒:-) – 2011-04-14 13:45:23

1

你可以定义一个临时表(可能是表变量),并利用OUTPUT条款对您的INSERT(你可以在一个触发器利用Inserted伪表,等):

DECLARE @NewIDs TABLE (MagicID INT, Name VARCHAR(50)) 

INSERT INTO [dbo].[myMagicTable]([name]) 
OUTPUT Inserted.MagicID, Inserted.Name INTO @NewIDs(MagicID, Name) 
    SELECT [name] 
    FROM  [dbo].[myMagicSource] 
    WHERE /

,然后使用该表变量的INSERT后:

INSERT INTO 
    [dbo].[myMagicBackupTable]([id], [name]) 
    SELECT MagicID, [name] 
    FROM @NewIDs 

,并从那里走。

相关问题