在ptt database 看到這個
按我前往
我稍微修改了一下
create table t1030 (
id int not null primary key
, tname text
, tdesc text
, tconfirm bool not null
);
insert into t1030 values
(001, 'aaa', 'bbb'
, case
when tname = 'aaa' and tdesc = 'bbb' then true
else false
end);
Parse error: no such column: tname
to t1030 values (001, 'aaa', 'bbb' , case when tname = 'aaa' and tdesc = 'bbb'
error here ---^
可以看到出現了錯誤.
大家可以試試看,怎樣解決這個.
當然我有一個初步的方法.
關於原po問題~
我都是用exists方式判斷~無資料才新增@@...
或者有資料新增失敗也是可以記錄~
insert into t1030
select 001
, 'aaa'
, 'bbb'
,ifnull((
select false
from t1030
where tname = 'aaa'
and tdesc = 'bbb'
LIMIT 1
),true);
借用純真的人的程式碼修改了一下,尚有瑕疵(第四次:id 相同時 tname,tdesc 會被取代);
不過可以看出來是 tconfirm = 0 ,也就是這筆資料未經過第二次確認。
REPLACE into t1030
select '001'
, 'aaa'
, 'bbb'
,ifnull((
select true
from t1030
where id='001'
and tname = 'aaa'
and tdesc = 'bbb'
LIMIT 1
),false);
如果需求是存在就進行更新 不存在進行新增
在 MSSQL 中也可以透過 Merge 的語法
https://learn.microsoft.com/zh-tw/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver16