Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL存储过程中逐个读取CSV文件数据_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

从SQL存储过程中逐个读取CSV文件数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,需要逐个读取CSV文件信息。i、 e.如果文件中的客户存在于客户表中,则插入详细信息表,否则插入错误表。所以我不能使用批量插入方法 如何从CSV文件中逐个读取记录?如何给出路径? 批量插入方法在这里不起作用。使用批量插入加载到暂存表中,然后逐行处理。一个选项是使用而不是insert触发器有选择地将行放入正确的表中,然后使用常规的批量插入和触发选项 接近的东西 CREATE TRIGGER bop ON MyTable INSTEAD OF INSERT AS BEGIN INSERT I

需要逐个读取CSV文件信息。i、 e.如果文件中的客户存在于客户表中,则插入详细信息表,否则插入错误表。所以我不能使用批量插入方法

如何从CSV文件中逐个读取记录?如何给出路径?
批量插入方法在这里不起作用。

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

一个选项是使用
而不是insert
触发器有选择地将行放入正确的表中,然后使用常规的
批量插入
触发
选项

接近的东西

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;

如果定期导入文件,则可以创建具有相同架构的表(可导入),在该表上设置触发器,然后通过批量导入到
可导入到
来导入到
MyTable
。这样,您就可以保留触发器,只要导入到可导入的
中,就不需要为每次导入执行任何特殊的设置/过程。

暂存表是个好主意,但为什么要逐行处理它呢?根据具体情况,最好同时对整个数据集使用
MERGE
或只是
INSERT
UPDATE