- PR -

BulkCopyのインポートバイト数について

1
投稿者投稿内容
miroku
会議室デビュー日: 2006/08/23
投稿数: 5
投稿日時: 2006-08-23 13:56
はじめて投稿させていただきます。

SQLServer2000のBulkCopyを使用してのデータインポートについて質問させてください。

現在BulkCopyを使用してサーバー間のデータ移行用バッチを作成しているのですが、なぜかtext型のデータが正しくインポートされなくて困っております。
短い文字列のデータなら問題ないのですが、長い文字列データでは1020byteで切れてインポートされてしまいます。

なにか1フィールドに対する最大文字列長を指定するプロパティがあるのかと探してはいるのですが、どうしても見つけることができません。
大変初心者的な質問で申し訳ないのですが、どなたかわかる方ご指導頂けないでしょうか?

なお、開発言語はVB6.0を使用しており、記述ソースは以下のとおりです。



Const SQLDMODataFile_NativeFormat = 4
Const SQLDMODataFile_SpecialDelimitedChar = 3
Const SQLDMODataFile_CommaDelimitedChar = 1
Const SQLDMODataFile_TabDelimitedChar = 2
Dim objServer As Object
Dim objBcp As Object
Dim objDatabase As Object
Dim objTable As Object

Set objServer = CreateObject("SQLDMO.SQLServer")
Set objBcp = CreateObject("SQLDMO.BulkCopy")

Call objServer.Connect([DSOURCE], [ID], [PASSWORD])
Set objDatabase = objServer.Databases([DB])


objBcp.DataFilePath = [インポートデータファイルパス]
objBcp.DataFileType = SQLDMODataFile_SpecialDelimitedChar
objBcp.ColumnDelimiter = "$|$"
objBcp.RowDelimiter = "%|%"

Set objTable = objDatabase.Tables([TABLE])

nRow = objTable.ImportData(objBcp)

Call objServer.DisConnect()

Set objServer = Nothing


DataFileTypeをNativeFormat等に変更すれば良いのかと色々試してみましたが、どうしても1020byteで切れてしまいます。
お手数ですがご指導のほど宜しくお願いいたします。



[ メッセージ編集済み 編集者: miroku 編集日時 2006-08-23 13:58 ]
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2006-08-25 21:39
引用:

mirokuさんの書き込み (2006-08-23 13:56) より:

短い文字列のデータなら問題ないのですが、長い文字列データでは1020byteで切れてインポートされてしまいます。




お疲れ様です。
TimberLandChapel です。

「SQLDMODataFile_UseFormatFile」で,フォーマットファイルを指定してもだめですか?
ロードするデータ内に 数値型 フィールドなどが混じっていて,桁ずれなどを起こしていませんか?

自分の環境では,
手で作った2000Byte のデータを読み込めていますが。

あと,
純粋に VB6.0 の開発環境でしたら,
まずは,
「Microsoft SQL DMO Object Library」の参照状態で開発,デバッグして,
その後,配置等の柔軟性を考えて,レイトバインドに書き換えたほうがよいと思います。

----------
TimberLandChapel
Micorosoft MVP for Windows Server System - SQL Server(Jul 2005 - Jun 2007)
http://blogs.timberlandchapel.com/blogs/timberlandchapel/
miroku
会議室デビュー日: 2006/08/23
投稿数: 5
投稿日時: 2006-08-25 22:16
TLC様
ご返答ありがとうございます。

ご指摘のとおりフォーマットファイルを作成して対応しようかとも考えたのですが、対象テーブル数が150近くあり、また頻繁な改修によりテーブルが追加、フィールドの変更等が発生するのであまり使用したくありませんでした。

結果として、BulkCopyを使用することを断念し、シェルでコマンドプロンプトからbcpを実行することで対応いたしました。
お手数お掛けいたしました。

なお、桁ズレの件は恐らく無いかと思います。
というのは、1000byteなどのデータでは正常にインポートが行なえていたためです。
(他のフィールドの条件は同じ)
結局、何故切れてしまうのかは解らずじまいですが。。。

以上、質問にご返答頂き本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)