0

ASP.NET / SQL Server 2008アプリを使用して、CSVファイル(おそらく100万レコード)からレコードを一括挿入する必要があります。最初にそれらをステージングテーブルにインポートするので、データを永続テーブルに移動する前に一部のデータを操作できます。

これは定期的に発生します。また、複数のインポートが同時に発生する可能性があります。また、各インポートを他のインポートから通知する必要があります。

私の当初の計画は、Import_IDを含む列を使用することでした。しかし、一括挿入ではフィールド値を設定できないことがわかりました。

検索を行うと、ビューへの一括挿入を実行できることがわかります。そして、ビューに名前付きパラメーター(Import_ID)を含めることができると思います。しかし、私はまだパラメータの設定を実際に学んでいないので、これが可能かどうか、またはそれを行う方法がわかりません。

誰かがこれを行う方法を教えてもらえますか、または別の解決策を教えてもらえますか?

ありがとう

4

1 に答える 1

2

たとえば、SPIDがわかっているため(静的テーブルのスキーマを信頼できると仮定して)、CSVファイルの@filepathと@ImportIDを指定して、次のように言うことができます。セッションIDをサフィックスとして使用してテーブルを作成し、すべての作業を単一の動的SQLバッチで実行します。

DECLARE @sql NVARCHAR(MAX), @spid VARCHAR(12) = RTRIM(@@SPID);

SET @sql = N'SELECT * INTO dbo.Stage' + @spid 
    + ' FROM dbo.RealStagingTable WHERE 1 = 0;';

SET @sql += N'BULK INSERT dbo.Stage' + @spid + ' FROM ('''
    + @filepath + ''' WITH (options);'

SET @sql += N'INSERT dbo.RealTable(ImportID, other columns)
  SELECT ' + RTRIM(@ImportID) + , other columns
  FROM dbo.Stage' + @spid + ';';

SET @sql += N'DROP TABLE dbo.Stage' + @spid + ';'

EXEC sp_executesql @sql;
于 2012-05-04T03:53:01.933 に答える