日記
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 評価期限切れ
カテゴリー:日記
目次へ戻る