7.1有条件的更新插入 Merge into

插入之前,看表中是否有这次准备插入的却已经存在的数据,存在的进行更新,不存在进行插入 

在oracle里面有两种方法:

一,Merge into

MERGE INTO test1  

USING test2  

ON (test1.numid = test2.numid)  

WHEN MATCHED THEN --不需要填写更新的目标表  

    UPDATE SET test1.varid = test2.varid  

WHEN NOT MATCHED THEN --不需要填写插入的目标表  

INSERT VALUES (test2.numid, test2.varid);  

例子:

--column1 column2 column3是变量

 MERGE INTO users a

      USING (SELECT v_column1 NAME, v_column2 password, v_column3 desc

               FROM dual) b

      ON (a.name = b.name)

      WHEN MATCHED THEN

        UPDATE SET a.password = b.password and a.desc = b.desc

      WHEN NOT MATCHED THEN

        INSERT (NAME, password, desc) VALUES (b.NAME, b.password, b.desc);

二.

--p_column1是变量或者参数
select count(*) into v_cnt from a where a.name = p_column1
if v_cnt>0 then update ..
else insert..
oracle中的exists表示()内子查询语句返回结果不为空,是在where后面的.说明where条件成立就会执行主sql语句,
如果为空就表示where条件不成立,sql语句就不会执行。
not exists和exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句。负责不执行。
在sqlserver 可以直接使用
if exists(select 1 from a where a.name = p_column1)
update a set ...
else
insert ...