線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1562
推到 Plurk!
推到 Facebook!

怎樣可以實現條件性插入或更新?

答題得分者是:st33chen
KFC123_60201
一般會員


發表:58
回覆:18
積分:15
註冊:2006-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-19 10:22:30 IP:139.78.xxx.xxx 訂閱
我在用MSACCESS及ADO寫資料庫程序,但遇到一個棘手的問題。我的情況是這樣的,我有一個CVS文件,裡面有幾千行的資料要錄入資料庫,每一行對應一個record,每一行的第一個數據是key,我先要讀入一行,分析出所有數據,然後查詢一下table中有沒有這個記錄,如果有,就更新它,如果沒有,就插入一筆。但這樣做效率很低,因為我要先用 SELECT 來判斷有沒有這筆記錄,然後再判斷該使用 UPDATE 還是 INSERT SQL。請問大家有甚麼好辦法?
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-19 14:17:38 IP:210.242.xxx.xxx 訂閱
試試用 Locate 應該可以
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-20 09:27:00 IP:122.116.xxx.xxx 未訂閱
想到四個方法, 但沒測試過, 不知效率如何
1. 用 原table 的 filter 來測試是否已存在某 key 值的資料.
讀入 csv 一筆, 設 talbe 的 filterstring 為該key 再設 filter 為 on, 檢查 table 的筆數, 若 0 新增 否則 更新.
2. 先 update, 查看 RowsAffected 若 0 則 insert.
3. 如果 database engine 可傳回(新增已存在key) 或 (更新未存在key) 的錯誤, 可以用
try
update
except
insert
end;

try
insert
except
update
end;
的結構來做,
4. 整批做法
將 csv 轉入一個 暫時 table (ex.tmptable)
再將 tmptable 中 key 值不存在於 table 的資料 insert 到 table:
insert into table (fld1, fld2, ...) select distinct fld1, fld2, ... from tmptable where keyfld not in (select keyfld from table);
再由 tmptable 中 key 值 已存在於 table 的資料 update 到 table :
請參考:
UPDATE suppliers
SET supplier_name =( SELECT customers.name FROM customers WHERE customers.customer_id = suppliers.supplier_id)
WHERE EXISTS ( SELECT customers.name FROM customers WHERE customers.customer_id = suppliers.supplier_id);


from titles, sales
WHERE titles.title_id = sales.title_id
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-07-20 09:32:07, 註解 無‧
系統時間:2024-11-22 16:30:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!