需要逐個讀取CSV文件信息。即如果文件中的客戶存在於客戶表中,則插入到詳細表中,否則插入到錯誤表中。所以我不能使用批量插入方法。 如何從CSV文件中逐一讀取記錄?如何給路徑? 批量插入方法不會在這裏工作。從SQL存儲過程中逐一讀取CSV文件數據
謝謝
需要逐個讀取CSV文件信息。即如果文件中的客戶存在於客戶表中,則插入到詳細表中,否則插入到錯誤表中。所以我不能使用批量插入方法。 如何從CSV文件中逐一讀取記錄?如何給路徑? 批量插入方法不會在這裏工作。從SQL存儲過程中逐一讀取CSV文件數據
謝謝
一種選擇是使用INSTEAD OF INSERT
觸發器選擇性地將該行放入正確的表格中,然後使用正常的BULK INSERT
和選項FIRE_TRIGGERS
。
東西接近;
CREATE TRIGGER bop ON MyTable INSTEAD OF INSERT AS
BEGIN
INSERT INTO MyTable
SELECT inserted.id,inserted.name,inserted.otherfield FROM inserted
WHERE inserted.id IN (SELECT id FROM customerTable);
INSERT INTO ErrorTable
SELECT inserted.id,inserted.name,inserted.otherfield FROM inserted
WHERE inserted.id NOT IN (SELECT id FROM customerTable);
END;
BULK INSERT MyTable FROM 'c:\temp\test.sql'
WITH (FIELDTERMINATOR=',', FIRE_TRIGGERS);
DROP TRIGGER bop;
如果你經常導入文件,你可以創建一個表(ImportTable)具有相同的架構,設置了觸發和做通過批量導入的進口MyTable
到ImportTable
。這樣,您可以保持觸發器,只要您導入到ImportTable
,您不需要爲每個導入執行任何特殊設置/過程。
使用批量插入加載到登臺表,然後逐行處理它。
臨時表是一個好主意,但爲什麼要逐行處理?根據具體情況,對整個數據集合使用'MERGE'或者只是'INSERT'和'UPDATE'將會更好。 – Pondlife