ファイルからテーブルにデータをアップロードする方法には、bcpユーティリティやBII.EXEといったものがありますが、これらの方法はトランザクションの内部で実行することができません。
つまり、他のオペレーションを含めて1つのトランザクションとして処理し、途中で失敗した場合に全体をロールバックするということができないのです。
しかし、BULK INSERTステートメントを使えば、トランザクションの内部でファイルからテーブルにデータをアップロードすることが可能になります。
BULK INSERTステートメントではbcpユーティリティと全く同じ形式のデータファイルとフォーマットファイルを使用します。
例えば、test.datというデータファイルとtest.fmtというフォーマットファイルを使ってTABLE1にデータをアップロードしたい場合は、以下のようなステートメントを実行します
BULK INSERT TABLE1 FROM 'C:\test.dat' WITH (FORMATFILE = 'c:\test.fmt')これをトランザクションの内部で実行することにより、他のSQLステートメントと同様にトランザクションの一部として実行され、失敗時にはロールバックすることも可能になります。
ただ、bcpユーティリティと同じ仕組みであるために、このBULK INSERTステートメントでも
- imageデータと他の列のデータを同時にアップロードすることはできない
- 複数レコードのimageデータを同時にアップロードすることもできない
【関連エントリ】
[SQL Server] JDBCによるtext、ntext、imageの操作方法(その1) 2005/03/02
[SQL Server] JDBCによるtext、ntext、imageの操作方法(その2) 2005/03/03
[SQL Server] text型やimage型を読み込む際の最適なバッファサイズは? 2005/03/09
[SQL Server] imageデータをファイルから直接登録する方法 2005/03/15
[SQL Server] BULK INSERTステートメントによるデータのアップロード 2005/03/16
[SQL Server] imageデータをファイルに直接出力する。2005/03/17
[SQL Server] image型やtext型はテキストポインタを利用して取得したほうが速い 2005/08/04