我正在尝试使用多列创建一个merge
过程。但是,我也遇到了有关列名的多个错误。
我希望能指出我要去哪里的错误。
create PROCEDURE [Etl].[MergeRPIData2] AS
SET NOCOUNT ON
MERGE [RetailPrice].[RetailPriceIndex] AS Trgt
USING (SELECT ItemId, Outlet, DataYear, DataMonth
FROM [RetailPrice].[StagingRPI]) AS Src (ItemId, Outlet, DataYear, DataMonth)
ON Trgt.ItemId=Src.ItemId AND Trgt.Outlet=Src.Outlet AND Trgt.DataYear=Src.DataYear AND Trgt.DataMonth=Src.DataMonth
WHEN MATCHED THEN
UPDATE SET ID=Src.ID, ItemId=Src.ItemId, Item=Src.Item, RPIType=Src.RPIType, Outlet=Src.Outlet, RPIWeight=Src.RPIWeight, PrevMonth=Src.PrevMonth,
CurrMonth=Src.CurrMonth, Remarks=Src.Remarks, DataYear=Src.DataYear, DataMonth=Src.DataMonth
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID, ItemId, Item, RPIType, Outlet, RPIWeight, PrevMonth, CurrMonth, Remarks, DataYear, DataMonth)
VALUES (Src.[ID], Src.[ItemId], Src.[Item], Src.[RPIType], Src.[Outlet], Src.[RPIWeight], Src.[PrevMonth], Src.[CurrMonth], Src.[Remarks], Src.[DataYear], Src.[DataMonth])
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
DELETE FROM [RetailPrice].[StagingRPI]
答案 0 :(得分:1)
在图片上读取SQL并不容易...但是,令我震惊的一件事是,您的WHEN MATCHED
和WHEN ǸOT MATCHED
子句引用了Src
中的许多实际上并不实际的列由Src
子查询返回。
即Src
返回4列:
同时,WHEN (NOT) MATCH
子句引用以下字段(缺少的字段表示为粗体):
我想象[RetailPrice].[StagingRPI]
所基于的Src
表中实际上所有缺失字段都是可用的(如果没有,则说明您存在严重的设计问题)。
要解决查询生成的多个无效列名错误,您需要调整Src
子查询,以便它返回所有需要的字段。我无法为您生成正确的查询,因为您没有将原始查询发布为文本。