我有以下查询:
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为自动递增标识列:
Products.Id
BulkProducts.Id
我想要达到的目标:
@OutProduct临时表包含由刚刚插入Products.Id的行和中的ID组成的元组BulkProducts。
@OutProduct
BulkProducts
我偶然发现的内容:BulkProducts.Id不能在该OUTPUT INSERTED.ID, BulkProducts.Id INTO语句中使用,因为它不是有效的语法。
OUTPUT INSERTED.ID, BulkProducts.Id INTO
我该如何解决?
编辑:我正在使用SQL Server 2012。
您可能要探索MERGE:
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)