2013-01-16 78 views
0

需要逐個讀取CSV文件信息。即如果文件中的客戶存在於客戶表中,則插入到詳細表中,否則插入到錯誤表中。所以我不能使用批量插入方法。 如何從CSV文件中逐一讀取記錄?如何給路徑? 批量插入方法不會在這裏工作。從SQL存儲過程中逐一讀取CSV文件數據

謝謝

回答

0

一種選擇是使用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)具有相同的架構,設置了觸發和做通過批量導入的進口MyTableImportTable。這樣,您可以保持觸發器,只要您導入到ImportTable,您不需要爲每個導入執行任何特殊設置/過程。

0

使用批量插入加載到登臺表,然後逐行處理它。

+0

臨時表是一個好主意,但爲什麼要逐行處理?根據具體情況,對整個數據集合使用'MERGE'或者只是'INSERT'和'UPDATE'將會更好。 – Pondlife