从SQL存储过程中逐个读取CSV文件数据
需要逐个读取CSV文件信息。i、 e.如果文件中的客户存在于客户表中,则插入详细信息表,否则插入错误表。所以我不能使用批量插入方法 如何从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
批量插入方法在这里不起作用。使用批量插入加载到暂存表中,然后逐行处理。一个选项是使用
而不是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
。