Sql server 如果在表b中找不到记录,则对表A进行SQL Server更新

Sql server 如果在表b中找不到记录,则对表A进行SQL Server更新,sql-server,Sql Server,具有下表: 表名计划 字段名 Key EMP _ID Key PLAN_NUMBER STATUS FIELD1 FIELD2 FIELD3 FIELD4 表名PLANS\u TEMP Key EMP_ID Key PLAN_NUMBER STATUS FIELD1 FIELD2 FIELD3 FIELD4 希望在计划表中有计划的数据 如果计划中不存在记录,则不希望删除记录,而是希望将状态设置为“I” Key EMP_ID Key PLAN_NUMBER STATUS FIELD

具有下表:

表名
计划

字段名

Key  EMP _ID
Key  PLAN_NUMBER
STATUS
FIELD1
FIELD2
FIELD3
FIELD4
表名
PLANS\u TEMP

Key  EMP_ID
Key  PLAN_NUMBER
STATUS
FIELD1
FIELD2
FIELD3
FIELD4
希望在
计划
表中有
计划的数据

如果计划中不存在记录,则不希望删除记录,而是希望将状态设置为“I”

Key  EMP_ID
Key  PLAN_NUMBER
STATUS
FIELD1
FIELD2
FIELD3
FIELD4
  • 如果Office\u Plan\u temp中不存在记录,则希望更新Office\u Plan.Status='I'
  • 大致如下:

    Update P
    Set status = ‘I’
    Where emp_id and plan_number not exists in Plans_Temp table
    
    (我们必须匹配位置号和平面号)

  • 如果在Plans_Temp表中找到记录,但在Plans表中找不到,则要插入

  • 对于所有现有记录,希望检查字段1、字段2、字段3和字段4中是否有任何更改,然后更新


  • 任何帮助都将不胜感激。

    类似的内容可能会对您有所帮助:

    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;
    

    我想在这种情况下你需要合并。更多信息请点击这里