假设一个表结构MyTable(KEY, datafield1, datafield2...).
通常我想要更新现有记录,或者如果新记录不存在则插入新记录.
实质上:
IF (key exists)
run update command
ELSE
run insert command
Run Code Online (Sandbox Code Playgroud)
写这个的最佳表现方式是什么?
我已经编写了一个存储过程,如果存在记录将进行更新,否则它将进行插入.它看起来像这样:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Run Code Online (Sandbox Code Playgroud)
我以这种方式编写它的逻辑是更新将使用where子句执行隐式选择,如果返回0,则插入将发生.
这样做的替代方法是进行选择,然后根据返回的行数进行更新或插入.我认为这是低效的,因为如果要进行更新,将导致2次选择(第一次显式选择调用,第二次隐式更新位置).如果proc要进行插入,那么效率就没有差别.
我的逻辑声音在这里吗?这是如何将插入和更新组合到存储过程中的?
我只是想将数据插入到SQL数据库表中,如果已经插入了一些数据,那么我想更新该数据.我怎么能用Java做到这一点.请帮助我,并提前抱歉英语不好.
我正在尝试使用此查询将一些模拟支付信息插入到dev数据库中:
INSERT
INTO
Payments(Amount)
VALUES(12.33)
WHERE
Payments.CustomerID = '145300';
Run Code Online (Sandbox Code Playgroud)
怎么能调整这个来执行?我也尝试过这样的事情:
IF NOT EXISTS(
SELECT
1
FROM
Payments
WHERE
Payments.CustomerID = '145300'
) INSERT
INTO
Payments(Amount)
VALUES(12.33);
Run Code Online (Sandbox Code Playgroud)