How to delete from source using MERGE command in SQL Server 2008?

后端 未结 4 938
[愿得一人]
[愿得一人] 2020-12-14 07:35

I am currently using the below merge code to migrate date from source to target. I have a new requirement to extend the below code to delete the record from source once an u

4条回答
  •  长情又很酷
    2020-12-14 07:57

    you can also use below code

    drop table energydata
    
    create table temp_energydata  
    (
    webmeterID int,
    DT DateTime ,
    kWh varchar(10)
    )
    
    Insert into temp_energydata
    select 1,getdate()-10, 120
    union
    select 2,getdate()-9, 140
    union
    select 3,getdate()-6, 37
    union
    select 4,getdate()-3, 40
    union
    select 5,getdate()-1, 240
    
    create table  energydata
    (
    webmeterID int,
    DT DateTime ,
    kWh varchar(10)
    ) 
    
    Insert into energydata (webmeterID,kWh)
    select 1, 120
    union
    select 2, 140
    union
    select 3, 37
    union
    select 4, 40
    
    select * from energydata 
    select * from temp_energydata
    
    begin tran ABC
    
    DECLARE @T TABLE(ID INT);
    
    MERGE INTO dbo.energydata WITH (HOLDLOCK) AS target
    USING dbo.temp_energydata AS source
        ON target.webmeterID = source.webmeterID
        AND target.kWh  = source.kWh 
    
    WHEN MATCHED THEN 
        UPDATE SET target.DT = source.DT
    
    WHEN NOT MATCHED BY source THEN  delete   
     OUTPUT source.webmeterID INTO @T;
    
    
    DELETE temp_energydata
    WHERE webmeterID in (SELECT webmeterID
                         FROM @T);
        --INSERT (webmeterID, DT, kWh)
        --VALUES (source.webmeterID, source.DT, source.kWh)
    
    
    rollback  tran ABC
    commit  tran ABC
    

提交回复
热议问题