输出Inserted.Id和另一个字段

时间:2016-05-20 06:28:24

标签: sql sql-server tsql

我有以下查询:

DECLARE @OutProduct TABLE 
(
    ProductID INT,
    BulkProductId INT
)

INSERT INTO dbo.Products 
        ( EanCode , 
          ChangedDateTime , 
          ChangedById , 
          Deleted  
        ) 
OUTPUT INSERTED.ID, BulkProducts.Id INTO @OutProduct (ProductID, BulkProductId)
SELECT  EanCode , 
        GETDATE(), 
        GETDATE(),
        0 
FROM dbo.BulkProducts 
WHERE ProductId is NULL

假设Products.Id& BulkProducts.Id是自动递增标识列:

我想要实现的目标:

@OutProduct临时表包含由刚刚插入的Products.Id组成的元组和BulkProducts中行的ID。

我偶然发现:BulkProducts.Id无法在OUTPUT INSERTED.ID, BulkProducts.Id INTO语句中使用,因为它不是有效的语法。

我该如何解决这个问题?

编辑:我正在使用SQL Server 2012。

1 个答案:

答案 0 :(得分:3)

您可能想要探索MERGE

MERGE INTO dbo.Products
USING dbo.BulkProducts AS src
    ON 1 = 0 -- Never match
WHEN NOT MATCHED THEN
    INSERT(EanCode, ChangedDateTime, ChangedById, Deleted)
    VALUES(src.EanCode, GETDATE(), GETDATE(), 0)
OUTPUT
    inserted.Id,
    src.Id
INTO @OutProduct;

参考:

Dr. OUTPUT or: How I Learned to Stop Worrying and Love the MERGE by Adam Machanic