我有以下查询:
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。
答案 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