需要逐个阅读CSV文件信息。即如果文件中的客户存在于Customer表中,则插入到详细信息表中,否则插入到错误表中。所以我不能使用批量插入方法。 如何从CSV文件中逐一读取记录?怎么给这条路? 批量插入方法在这里不起作用。
谢谢
答案 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
,你就不需要为每次导入做任何特殊的设置/程序。