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 ...