0

需要一一读取CSV文件信息。即如果文件中的客户存在于客户表中,则插入明细表,否则插入错误表。所以我不能使用批量插入方法。

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

4

3 回答 3

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,就不需要为每次导入执行任何特殊的设置/过程。

于 2013-01-16T18:07:41.490 回答
0

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

于 2013-01-16T17:40:52.007 回答
0
CREATE TABLE #ImportData
(
    CVECount varchar(MAX), 
    ContentVulnCVE varchar(MAX),
    ContentVulnCheckName varchar(MAX)
)

BULK INSERT #ImportData
FROM 'D:\test.csv'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    TABLOCK
)
select * from #ImportData
//Here you can write your script to user read data one by one
DROP TABLE #ImportData
于 2021-09-10T07:01:52.017 回答