【发布时间】:2022-07-06 11:06:35
【问题描述】:
当我尝试多次执行 WHEN MATCHED 操作类型时,我收到此错误。我已经阅读了一些关于为什么会发生这种情况的答案和文章,并且 MSDN 不允许 WHEN MATCHED 除非它使用语句删除或更新。
但是,我找不到问题的答案。有人可以指导我在这里做什么。
我有一个包含两个 WHEN MATCHED 和 Update 条件的合并语句,这就是我所需要的。关于如何更好地编写代码的任何想法?
MERGE [Digibill].[MertleUsedLinkys] AS [Target]
USING [Staging].[MertleUsedLinkys] AS [Source]
ON [Source].[LinkyCode] = [Target].[LinkyCode]
WHEN MATCHED AND CONVERT(DATETIME, [Source].[LinkyPiTRunDateUTC]) > [Target].[LinkyPiTRunDateUTC]
THEN
UPDATE SET [Target].[LinkyPiTRunDateUTC] = [LinkyPiTRunDateUTC],
[Target].[LinkyQty] = [Source].[LinkyQty]
WHEN MATCHED AND CONVERT(DATETIME, [Source].[LinkyPiTRunDateUTC]) <= [Target].[LinkyPiTRunDateUTC]
THEN
UPDATE SET
[Target].[LinkyCode] = [Source].[LinkyCode],
[Target].[ServiceKey] = [Source].[ServiceKey],
[Target].[CustName] = [Source].[CustName],
[Target].[SupplyRegion] = [Source].[SupplyRegion],
[Target].[ServiceStatus] = [Source].[ServiceStatus],
[Target].[NS_ExtID] = [Source].[NS_ExtID],
[Target].[PartitionKey] = [Source].[PartitionKey],
[Target].[BillingMthly_PIT] = [Source].[BillingMthly_PIT],
[Target].[CurrentBillingPeriod] = [Source].[CurrentBillingPeriod],
[Target].[LinkyPiTRunDateUTC] = [Source].[LinkyPiTRunDateUTC],
[Target].[CurrBillingPeriodStatus] = [Source].[CurrBillingPeriodStatus],
[Target].[LinkyQty] = [Source].[LinkyQty]
WHEN NOT MATCHED THEN
INSERT (
[LinkyCode] ,
[ServiceKey] ,
[CustName],
[SupplyRegion],
[ServiceStatus],
[NS_ExtID],
[PartitionKey],
[BillingMthly_PIT],
[CurrentBillingPeriod],
[LinkyPiTRunDateUTC],
[CurrBillingPeriodStatus],
[LinkyQty]
)
VALUES
([Source].[LinkyCode], [Source].[ServiceKey], [Source].[CustName], [Source].[SupplyRegion], [Source].[ServiceStatus], [Source].[NS_ExtID], [Source].[PartitionKey],
[Source].[BillingMthly_PIT], [Source].[CurrentBillingPeriod],CONVERT(DATETIME,[Source].[LinkyPiTRunDateUTC]),[Source].[CurrBillingPeriodStatus],[Source].[LinkyQty]
)
END;
显然,当我运行代码时,我得到了错误。感谢任何想法、线索或解决方法。
【问题讨论】:
-
谢谢你。我会去的
标签: sql sql-server