请问一下,我要向一个表插入数据,根据ID,重复的更新,没有的插入,不使用COUNT后判断,能做到吗?

来源:互联网 发布:健身活动方案知乎 编辑:程序博客网 时间:2024/04/30 10:00

请问一下,我要向一个表插入数据,根据ID,重复的更新,没有的插入,不使用COUNT后判断,能做到吗?

 

Merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于ON子句的条件。
该语句可以在同一语句中执行两步操作,可以减少执行多条INSERT 和UPDATE语句。
MERGE是一个确定性的语句,即不会在同一条MERGE语句中去对同一条记录多次做修改操作。
 
MERGE INTO  要合并的表/视图
USING   要更新或插入的数据源
ON   语句进行插入或更新的条件(注意条件要用括号括起来)
WHEN MATCHED THEN UPDATE  要更新的列(要加SET)
WHEN NOT MATCHED THEN INSERT  要插入的列(不用加表名)


例:
  MERGE INTO T_DUTY_EMPLOYEES T
  USING V_DUTY_EMPLOYEES V
  ON (T.ID = V.ID)
  WHEN MATCHED THEN
    UPDATE
       SET T.PROVINCE     = V.PROVINCE,
           T.CITY         = V.CITY,
           T.DUTYDAY      = V.DUTYDAY,
           T.DUTYTIME     = V.DUTYTIME,
           T.DUTYAREA     = V.DUTYAREA,
           T.EMPLOYEENAME = V.EMPLOYEENAME,
           T.EMPLOYEEID   = V.EMPLOYEEID,
           T.EMPLOYEETEL  = V.EMPLOYEETEL,
           T.BAK          = V.BAK
  WHEN NOT MATCHED THEN
    INSERT
      (PROVINCE,
       CITY,
       DUTYDAY,
       DUTYTIME,
       DUTYAREA,
       EMPLOYEENAME,
       EMPLOYEEID,
       EMPLOYEETEL,
       BAK,
       CNUM,
       ID,
       SUNNUM2,
       SUNNUM,
       ROLEID)
    VALUES
      (V.PROVINCE,
       V.CITY,
       V.DUTYDAY,
       V.DUTYTIME,
       V.DUTYAREA,
       V.EMPLOYEENAME,
       V.EMPLOYEEID,
       V.EMPLOYEETEL,
       V.BAK,
       V.CNUM,
       V.ID,
       V.SUNNUM2,
       V.SUNNUM,
       V.ROLEID);

 

原创粉丝点击