从SQL存储过程中逐个读取CSV文件数据

时间:2013-01-16 17:36:45

标签: sql sql-server sql-server-2008

需要逐个阅读CSV文件信息。即如果文件中的客户存在于Customer表中,则插入到详细信息表中,否则插入到错误表中。所以我不能使用批量插入方法。 如何从CSV文件中逐一读取记录?怎么给这条路? 批量插入方法在这里不起作用。

谢谢

2 个答案:

答案 0 :(得分:0)

使用批量插入加载到临时表中,然后逐行处理。

答案 1 :(得分: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),在其上设置触发器并通过批量导入到MyTable进行导入ImportTable。这样你就可以保留触发器,只要你导入ImportTable,你就不需要为每次导入做任何特殊的设置/程序。