小编典典

输出Inserted.Id和另一个字段

sql

我有以下查询:

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.IdBulkProducts.Id为自动递增标识列:

我想要达到的目标:

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

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

我该如何解决?

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


阅读 231

收藏
2021-05-05

共1个答案

小编典典

您可能要探索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;

参考:

OUTPUT博士或:我如何学会不再担心和爱合并,作者亚当·麦克汉尼(Adam
Machanic)

2021-05-05