带输出插入的SQL插入

带输出插入的SQL插入,sql,sql-server,Sql,Sql Server,我想这件事让我有点头晕。我试过一些不同的方法,真的不应该这么复杂。也许有人能帮我 我有一个数据表(源),我需要将其复制到其他两个表(target1和target2)。这些表之间有一个FK约束。因此,我需要将插入记录的id输出到第二个表中。我得到的最接近的结果是使用合并,但它抱怨: 输出到子句不能位于(主键,外键)的任一侧 (关键)关系 欢迎在以下方面提供任何帮助,或者如果我完全走错了路,我将感谢您提供的任何指导: BEGIN TRAN; MERGE [DBTarget].[dbo].[Targe

我想这件事让我有点头晕。我试过一些不同的方法,真的不应该这么复杂。也许有人能帮我

我有一个数据表(源),我需要将其复制到其他两个表(target1和target2)。这些表之间有一个FK约束。因此,我需要将插入记录的id输出到第二个表中。我得到的最接近的结果是使用合并,但它抱怨:

输出到子句不能位于(主键,外键)的任一侧 (关键)关系

欢迎在以下方面提供任何帮助,或者如果我完全走错了路,我将感谢您提供的任何指导:

BEGIN TRAN;
MERGE [DBTarget].[dbo].[TargetTable1] AS T

USING [DBSource].[dbo].[SourceTable] AS S ON (T.[Col1] = S.[Col1])

WHEN NOT MATCHED BY TARGET

    THEN INSERT([Col1] -- Target column
               ,[Col2] -- Target column
               ,[Col3] -- Target column
               ,[Col4])-- Target column

         VALUES(S.[Col1] -- Source column
               ,(SELECT [Col9] FROM [DBSource2].[dbo].[SourceTable2] YI WHERE YI.[Col1] = S.[Col1]) -- Here i am reaching out to another table for a column value for the inserted row
               ,S.[Col3] -- Source column
               ,S.[Col4])-- Source column

OUTPUT
    inserted.Id -- Value inserted to: [DBTarget].[dbo].[TargetTable2].[Col1]
    ,S.[Col2]   -- Value inserted to: [DBTarget].[dbo].[TargetTable2].[Col2]
    ,S.[Col3]   -- Value inserted to: [DBTarget].[dbo].[TargetTable2].[Col3]
    ,NULL       -- Value inserted to: [DBTarget].[dbo].[TargetTable2].[Col4]

INTO [DBTarget].[dbo].[TargetTable2] ([Col1]
                                     ,[Col2]
                                     ,[Col3]
                                     ,[Col4]);

ROLLBACK TRAN;  
GO 

下面是一个将输出与INSERT INTO语句一起使用的示例,但在merge中,语法无论如何都不可用。使用单独的DML语句对您来说也可能更有效。但是,您的场景让我对模式和这样做的原因感到疑惑,尽管我知道我们并不总是能够选择在该重新命名中执行什么操作。Shere是一个小时使用INSERT INTO语句输出的示例,但语法在merge中并不可用,因为您执行该操作的方式。使用单独的DML语句对您来说也可能更有效。但您的场景让我对模式和这样做的原因感到疑惑,尽管我知道在这方面我们并不总是可以选择要做什么