2012-09-17 56 views
0

这是我的查询更新与除声明

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) 

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

回答

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。我的解决方案就如何做到这一点提供了一个基本的想法。它最初可能无法正常工作。只要调整它一旦你理解了逻辑

+0

,但我需要仅从这个查询结果集更新记录(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)) –

+0

现在明白了........ –