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

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はダメなんかな?




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

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


フッターイメージ