【问题标题】:Update with except statement使用 except 语句更新
【发布时间】:2012-09-09 20:44:24
【问题描述】:

这是我的查询

SELECT PageVisit_ID,TargetSite_ID FROM [A].Datawarehouse.mi.ctb_PageEvent WITH (NOLOCK)
 EXCEPT 
 SELECT PageVisit_ID ,TargetSite_ID FROM [B].Datawarehouse.mi.ctb_PageEvent WITH (NOLOCK)

这两个表来自两个服务器。我需要从[B].Datawarehouse.mi.ctb_PageEvent 更新[A].Datawarehouse.mi.ctb_PageEvent 记录中的targetsite_id 仅与上述查询结果匹配。

【问题讨论】:

    标签: sql tsql select except


    【解决方案1】:

    试试这个

    DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));
    
    MERGE INTO [A].Datawarehouse.mi.ctb_PageEvent AS Target
    USING ( SELECT PageVisit_ID ,TargetSite_ID FROM [B].Datawarehouse.mi.ctb_PageEvent WITH (NOLOCK)) AS SOURCE
    ON Target.TargetSite_ID = Source.TargetSite_ID 
    WHEN MATCHED THEN
        //UPDATE OR do nothing
    WHEN NOT MATCHED BY TARGET THEN
        //INSERT 
    OUTPUT $action INTO @SummaryOfChanges;
    

    请参考SQL SERVER – Merge Operations – Insert, Update, Delete in Single Execution。我的解决方案只是给出了如何做到这一点的基本想法。它最初可能无法 100% 工作。一旦你理解了逻辑,只需调整它

    【讨论】:

    • 但我只需要从此查询结果集中更新记录(SELECT PageVisit_ID,TargetSite_ID FROM [A].Datawarehouse.mi.ctb_PageEvent WITH (NOLOCK) EXCEPT SELECT PageVisit_ID ,TargetSite_ID FROM [B].Datawarehouse .mi.ctb_PageEvent WITH (NOLOCK))
    猜你喜欢
    • 2011-09-29
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多