ヘッダーイメージ 本文へジャンプ
日記

2015年04月17日 19時55分
SQLServer に、大量データのインサート
VB.NETで業務を組んでいるんですが、
オンラインで大量データをインサートする必要が出てきたのですが
それなりの時間がかかってしまいます

BCPでやればいいんですが、オンライン処理でやりたいのでバッチキックは避けたいので却下
BULKINSERT ってのが速いらしいんですが、どうやらBCPみたいにデータファイルを用意して
ファイル指定でインサートするみたいなので、DBサーバーからアクセスできる場所に
ファイルを作る必要が有る様です
これまた環境的に難しい話になってきます・・・

他にない物かと思っていたのですが BlukCopy ってのが使えそうです
DataTable とか DataRowの配列とかにデータを作って、丸ごとインサートしてくれるやつ

使い方は簡単で
「Dim bc As New SqlClient.SqlBulkCopy(コネクション)」とかでオブジェクトを作って
「bc.DestinationTableName = "テーブル名"」で、対象のテーブルを指定し
「bc.WriteToServer(データテーブル)」で、ローディング

データテーブルの所は DateRow() でも SqlDataReader でも良いみたいです

対象テーブルと、渡すデータテーブルの項目数・項目位置が同じなら、上記3行でローディングできます
(項目名は関係ないみたいです)
項目数や位置が違う場合は ColumnMappings に対応を追加していくらしいです

速度としては、2分ほどかかっていた処理が、10秒ほどで終わるようになったので
10倍速ぐらいで動いてくれているようです

もちろん、ローディング対象のデータが、オンメモリーで処理できる時に限って!の話ですが・・・

他のDBはダメなんかな?





・リモートPCからSQLServerに繋ぐ
・SqlServer壊してしもた・・・
・SqlServerの不思議
・SQLServer のチューニング
・SQLSERVER のリストア
・NetFx3 ってなんだ?
・RDゲートウェイを入れてみました
・Windows上のApcheでASP.NETを動かす
・SQLServer に、大量データのインサート
・Windwos で mono
・Windows10 のシステムイメージの作成
・SQL Server 2017 RC2 評価期限切れ

カテゴリー:日記
目次へ戻る


フッターイメージ