如何仅更新以前未在SQL SERVER中更新的列

时间:2014-05-07 19:36:47

标签: sql sql-server sql-update adhoc

请原谅标题,因为我不知道如何将其列入标题。

我有一张表staging_cust_acctnaics_cd, naics_desc varchar, is_pep, phone_num, is_updated, update_date

我在下面写了一些语句来更新这个表。我需要使用代码只更新那些以前没有更新的列(我有is_updated(0或1)和update_date列)

如果您想知道我为什么单独更新语句,那是因为还有更多的更新语句具有依赖关系(比如UPDATE 2语句只需要在UPDATE 1之后运行)

我可以在下面的SQL语句中添加什么来应用上述逻辑?

-- Update NAIC code and description
UPDATE S 
SET    s.naics_cd = left(n.naic, 6), 
       s.naics_desc = substring(n.naic, 9, 255) 
from   mtb..staging_cust_acct s 
       right outer join mtb_aml..tb_party_kyc e 
                     on e.customerinternalid = s.party_key 
       right outer join mtb_aml..tb_ref_naic n 
                     on e.d_case_id = n.d_case_id   

 -- Update is_PEP Flag
 UPDATE S 
 SET    s.is_pep = '1' 
 from   mtb..staging_cust_acct s 
        right outer join mtb_aml..tb_party_kyc e 
                      on e.CustomerInternalID = s.party_key 
        right outer join mtb_aml..tb_ref_pep_details p 
                     on e.d_case_id = p.d_case_id 

 -- Update party phone number
 UPDATE S 
 SET    s.phone_num = pc.phone 
 from   mtb..staging_cust_acct s 
        right outer join mtb_aml..tb_party_kyc e 
                      on s.party_key = e.customerinternalid 
        right outer join mtb_aml..tb_ref_primary_contact pc 
                     on pc.d_case_id = e.d_case_id  

1 个答案:

答案 0 :(得分:1)

在sql中添加where条件以检查is_updated(0或1)和update_date,如:

UPDATE S 
SET    s.naics_cd = left(n.naic, 6), 
       s.naics_desc = substring(n.naic, 9, 255) 
from   mtb..staging_cust_acct s 
       right outer join mtb_aml..tb_party_kyc e 
                     on e.customerinternalid = s.party_key 
       right outer join mtb_aml..tb_ref_naic n 
                     on e.d_case_id = n.d_case_id
       WHERE s.is_updated=0               --Added Condition
              AND s.update_date IS NULL     --Added Condition

在此,我假设is_updated=0表示未更新且update_date可以为空且&仅在编辑值时设置。

如果上述假设对您不利,您可以相应地更改条件。