私はこの声明をあまりにも長く見てきたと思います。このステートメントの更新部分が更新されない理由を誰か教えてもらえますか? 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
);