• ベストアンサー

テキストデータをSQLServerに取込むには

列区切なし、改行コードなしの固定長データをSQLにコンバートしたいのですが、上手く行かず困っています。 (ファイル形式:テキストファイルバイナリ固定長) ・試した方法  (1)DTSインポート/エクスポート(←もう全然上手く行きませんでした・・・)  (2)BULK INSERT       (←上手く取り出せている自身がない・・・) またコンバート後、SUBSTRINGを使ってデータを取り出し、フィールドにセットしていこうと考えているのですが、これも上手く行きません。 半角・全角文字やスペースが含まれていると、取り出せないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

INSERT INTO ~ までで、一時テーブルにファイルの中身が全てそのまま入ります。 MS-DOSから【type [ファイルのフルパス]】と実行した時の結果です。 ところで根本的な疑問なのですが、 テキストファイルに(1)のようにデータが入っていて、 (2)のようにテーブルに入れたいということですよね? (1) 01AAA02BBB03CCC (2) -- --- 01 AAA 02 BBB 03 CCC それで構わないならば、No1の方の方法で上の例を使うとこのようになります。 CREATE TABLE #TempTable (value char(15)) INSERT INTO #TempTable EXEC master..xp_cmdshell 'type [ファイルのフルパス]' SELECT @value = value FROM #TempTable WHERE value IS NOT NULL SET @i = 1 WHILE @i <= DATALENGTH(@value) BEGIN   INSERT INTO [テーブル名]   VALUES (SUBSTRING(CAST(@value AS text),@i,2),SUBSTRING(CAST(@value AS text),@i,3))   SET @i = @i + 5 END もし例がおかしければ具体的な例を上げてください。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

No1の方の2行目のxp_cmdshellの後ろは【'type [ファイルのフルパス]'】だと思います。

noname#5252
質問者

補足

そのように変更したら、エラーは発生しなくなりました。 ありがとうございました。 ところで、基本的な質問なんですが、 CREATE TABLE #TempTable (value varchar(2738)) INSERT INTO ~ ここまでで、一体どのようなデータが出来上がるのでしょうか? テキストファイルの何バイトずつが1レコードになるのでしょうか? 全然理解してなくてすみません... よろしくお願いします。

すると、全ての回答が全文表示されます。
  • kumagoro-
  • ベストアンサー率57% (36/63)
回答No.1

CREATE TABLE #TempTable (value char(8000)) INSERT INTO #TempTable EXEC master..xp_cmdshell '[ファイルのフルパス]' SELECT @value = value FROM #TempTable WHERE value IS NOT NULL ここまでで添付テーブルにファイルの内容が入り、 その内容が「@value」に入ります。 それが仮に100バイトだとして、これを10バイトずつテーブルに入れるとすると以下のようになります。 SUBSTRING関数は第一引数がchar型の時は文字数、text型の時はバイト数で数えるので、text型に変換しています。 SET @i = 1 WHILE @i <= 100 BEGIN INSERT INTO TableName VALUES (SUBSTRING(CAST(@value AS text),@i,10)) SET @i = @i + 10 END

noname#5252
質問者

補足

回答していただき、ありがとうございました。 でも、2行目の、INSERT INTO~のところで、エラーが発生してしまいます。 エラーの内容は、 「'[ファイルのフルパス]'は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチファイルとして認識されていません。」 と言うものです。 どういうことなのでしょうか???

すると、全ての回答が全文表示されます。

専門家に質問してみよう