简体   繁体   English

合并 - 如果 ID 不匹配则插入

[英]Merge - Insert if ID doesn't match

I already updated this content, I just want to ask if a ID doesn't match, how to add it using Merge ?我已经更新了这个内容,我只是想问如果一个ID不匹配,如何使用Merge添加它?

MERGE INTO EmpMasterX01132020 a
USING AMAGroupEmpMaster b ON a.UserID = b.userid

WHEN MATCHED THEN
   UPDATE 
      SET a.LastName = b.lastname,
          a.FirstName = b.firstname,
          a.MiddleName = b.middlename,
          a.SuffixName = b.suffixname,
          a.AkaName = b.akaname, 
          a.Gender = b.gender,
          a.BirthDate = CONVERT(varchar, b.BirthDate , 23) ,
          a.BirthPlace = '',
          a.CivilStatus = b.CivilStatusID,
          a.Citizenship = b.citizenship,
          a.Religion = b.religion,
          a.BranchCode = Payroll_Migration012020.dbo.Mgrt_fn_MapData('Branch',b.branchcode),
          a.JDCode = b.positioncode,
          a.TerminationReason = b.terminationreason ,
          a.EmploymentStatus =(case when  b.empresign='NULL' then 'ACTIVE' else 'RESIGNED' end) ,
          a.EmpType = (CASE WHEN b.emptype ='N' then 0 else 1 end),
          a.ApplicantNo = '';

Usually, the Merge statement always has two parts:通常,Merge 语句总是有两个部分:

-------- Preparing the dataset

MERGE INTO <target_table_name> AS T

USING (SELECT
            COLUMN_NAME1 --primary key column
           ,COLUMN_NAME2
           ,COLUMN_NAME3
       FROM <source_table_name>
       WHERE <if_needed>
      ) AS S
   ON (T.COLUMN_NAME1 = S.COLUMN_NAME1) -- primary key columns

-------- Part 1 - if the rows matched
WHEN MATCHED THEN
UPDATE SET T.COLUMN_NAME3 = S.COLUMN_NAME3

-------- Part 2 - if the rows don't match
WHEN NOT MATCHED THEN
INSERT (T.COLUMN_NAME1, T.COLUMN_NAME2, T.COLUMN_NAME3)
VALUES (S.COLUMN_NAME1, S.COLUMN_NAME2, S.COLUMN_NAME3);

Usually in some DBs as Oracle in order to make Update, you have to express it as a merge.通常在一些像 Oracle 一样的 DB 中,为了进行更新,您必须将其表示为合并。

MERGE INTO EmpMasterX01132020 a
   USING AMAGroupEmpMaster b
      ON a.UserID = b.userid
WHEN MATCHED THEN
   UPDATE 
      SET  a.LastName = b.lastname,
      a.FirstName = b.firstname,
      a.MiddleName = b.middlename,
      a.SuffixName = b.suffixname,
      a.AkaName = b.akaname, 
      a.Gender = b.gender,
      a.BirthDate = CONVERT(varchar, b.BirthDate , 23) ,
      a.BirthPlace = '',
      a.CivilStatus = b.CivilStatusID,
      a.Citizenship = b.citizenship,
      a.Religion = b.religion,
      a.BranchCode = Payroll_Migration012020.dbo.Mgrt_fn_MapData('Branch',b.branchcode),
      a.JDCode = b.positioncode,
      a.TerminationReason = b.terminationreason ,
      a.EmploymentStatus =(case when  b.empresign='NULL' then 'ACTIVE' else 'RESIGNED' end) ,
      a.EmpType = (CASE WHEN b.emptype ='N' then 0 else 1 end),
      a.ApplicantNo = ''
WHEN NOT MATCHED BY TARGET
  INSERT(Lastname,FirstName, <List of all the columns>)
  VALUES(b.lastname,b.FirstName,<List of values from b>)
;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM