0

CSVファイル情報を1つずつ読み取る必要があります。つまり、ファイル内の顧客が顧客テーブルに存在する場合は詳細テーブルに挿入し、そうでない場合はエラーテーブルに挿入します。そのため、一括挿入方式は使用できません。

CSVファイルから1レコードずつ読み取る方法は?パスを与える方法は?ここでは、一括挿入方式は機能しません。

4

3 に答える 3

0

バルクインサートを使用してステージングテーブルにロードし、行ごとに処理します。

于 2013-01-16T17:40:52.007 に答える
0

1つのオプションは、トリガーを使用して行を正しいテーブルに選択的に配置し、オプションでINSTEAD OF INSERT通常を使用することです。BULK INSERTFIRE_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
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 に答える