2016-04-28 20 views
2

持つ以下の表:SQL Serverの更新は、レコードが表Bに見つからない場合

表名PLANS

フィールド名

Key EMP _ID 
Key PLAN_NUMBER 
STATUS 
FIELD1 
FIELD2 
FIELD3 
FIELD4 

表名PLANS_TEMP

Key EMP_ID 
Key PLAN_NUMBER 
STATUS 
FIELD1 
FIELD2 
FIELD3 
FIELD4 

PLANS_TEMPのデータを持っています。PLANSテーブル。

代わりにレコードを削除したくないが、ステータスを設定したいレコードがOffice_Plan_tempに存在しない場合は、レコードがPLANS_TEMP

  1. に存在しない場合=「私は」 'Office_Plan.Status =を更新したいです私は次のよう

何かを」:

Update P 
Set status = ‘I’ 
Where emp_id and plan_number not exists in Plans_Temp table 

(私たちはLOCATION_IDと一致する必要がPLAN_NUMBER)

  1. レコードがPlans_Tempテーブルにありますが、Plansテーブルに見つからない場合は、挿入します。

  2. 既存のすべてのレコードについて、field1、field2、field3、およびfield4に変更があるかどうかを確認してから、更新する必要があります。

ご協力いただければ幸いです。このような

+1

私はあなたがこのような状況では、 'MERGE'が必要だと思います。詳細はこちらhttps://msdn.microsoft.com/en-us/library/bb510625.aspx – gofr1

答えて

1

何かがあなたを助けることがあります。

MERGE PLANS as target 
USING PLANS_TEMP as source 
ON target.EMP_ID = source.EMP_ID AND target.PLAN_NUMBER = source.PLAN_NUMBER 
--If record doesn’t exists in Office_Plan_temp Wants to update Office_Plan.Status = ‘I’ 
WHEN NOT MATCHED BY SOURCE THEN 
    UPDATE SET [STATUS] = 'I' 
--If Record found in Plans_Temp table but not in Plans table, wants to insert. 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (EMP_ID, PLAN_NUMBER, [STATUS], FIELD1, FIELD2, FIELD3, FIELD4) 
    VALUES (source.EMP_ID, source.PLAN_NUMBER, source.[STATUS], source.FIELD1, source.FIELD2, source.FIELD3, source.FIELD4) 
--For all the existing records, (! HERE UPDATE WITHOUT ANY CHECKING wants to check if there’s any change in) field1, field2, field3 and field4 then update. 
WHEN MATCHED THEN 
    UPDATE SET target.FIELD1 = source.FIELD1, 
       target.FIELD2 = source.FIELD2, 
       target.FIELD3 = source.FIELD2, 
       target.FIELD4 = source.FIELD4; 
関連する問題