2

私はこの声明をあまりにも長く見てきたと思います。このステートメントの更新部分が更新されない理由を誰か教えてもらえますか? or列を使用してテストすることで!=、必要な場合にのみ更新の原因を呼び出す必要があると思います-代わりに、意図せずに更新が不要な条件を作成したようです!

ステートメントを見る前に、次の 4 つのことを知っておく必要が
あります。 1. 一時テーブル #Facilities のデータには、複数のソースからの最新のデータが取り込まれます。このデータには、ボットの新しい (挿入) データと変更された (更新) データが含まれています。
2. Merge ステートメントを実行する前に、#Facility の内容にデータが含まれていることが確認されています。
3. マージ ステートメントの挿入部分が成功します。
4. ステートメントの更新部分は変更されたデータを更新しませんが、ステートメントは失敗しません。

MERGE INTO PhoneMaster AS facilitymaster
 USING #Facilities as facilitynew
   ON facilitymaster.facilityid = facilitynew.facilityid
    AND facilitymaster.siteid = facilitynew.siteid
     WHEN MATCHED AND 
     (
       facilitymaster.User__bID != facilitynew.User__bID
    or facilitymaster.Email__baddress != facilitynew.Email__baddress
    or facilitymaster.Facility__bName != facilitynew.Facility__bName
    or facilitymaster.Division != facilitynew.Division
    or facilitymaster.District != facilitynew.District
      ) THEN
    UPDATE SET
     facilitymaster.User__bID = facilitynew.User__bID,
     facilitymaster.Email__baddress = facilitynew.Email__baddress,
     facilitymaster.Facility__bName = facilitynew.Facility__bName,
     facilitymaster.Division = facilitynew.Division,
     facilitymaster.District = facilitynew.District
     WHEN NOT MATCHED THEN
  INSERT
  ( User__bID,
    Email__baddress,
    Facility__bName,
    Division,
    District,
            FacilityId,
    SiteId

  )
  VALUES
  (
    facilitynew.User__bID,
    facilitynew.Email__baddress,
    facilitynew.Facility__bName,
    facilitynew.Division,
    facilitynew.District,
            facilitynew.FacilityId,
    facilitynew.SiteId

 );
4

1 に答える 1