• 締切済み

SQLServer2005でフラットファイルの取込が出来ない(列の定義が必要?)

SQLServer2005でテキストファイルをテーブルに取り込もうとしているのですが、フラットファイルの列の定義(型など)がうまく出来ず、インポートできません。フラットファイルとテーブルの定義があっていないため、「型があっていない」「切り詰められる」等のエラーがたくさん出ます。 以下のような手順で作業しています。 ・適当なテーブル、Table1を作成。 ・Table1はCol001(int)、Col002(numeric(18,0))、Col003(tinyint)がある(複雑な列定義は一切無し) ・Table1にテストデータを2、3件作成する。 ・Table1の内容をTEXTファイルとしてエクスポートする。 ・Table1の内容をクリアする。 ・TEXTファイルをTable1にインポートする。 ↑ このインポートの際、データソースはフラットファイルソースを選択しています。カンマ区切りのフラットファイルです。テーブルの列数とも合っています。フラットファイルを指定した際、画面下に「この接続マネージャには列が定義されていません。」という警告メッセージが表示されます。いろいろ調べましたが、どうしてよいのかわかりません。 お分かりの方いらっしゃいましたら御教示下さい。 尚、情報が足りない場合御指摘頂ければ補足をします。 宜しく御願い致します。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 列定義を行う画面に「型の推測」ボタンがありますので、それを押してためしてみてください。

全文を見る
すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

そのテーブルには50バイト未満のchar/varcharのフィールドがありますか? もしあれば、フラットファイルソースの詳細設定で、該当列の長さを合わせてください。 初期値は50ですので、切捨てられる可能性があるとみなされ、エラーになります。

dorammmar
質問者

お礼

いろいろ調べた結果、 列定義を一律varchar200バイト等にして取り込むことで対応しました。 何かほかにうまい方法もあるかもしれませんが、、、。 ありがとうございました。

dorammmar
質問者

補足

回答ありがとうございます。 実際に扱いたいテーブルは列が200近くあり、その一つ一つについて列定義の設定を施さなければならないのかと頭を悩ませています。

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

関連するQ&A

  • Access:固定長文字列ファイルのインポートが正しく行われない

    いつもお世話になっております WindowsXP Access2002  MSDEを使用しております。 ある固定長テキストファイルのインポートを行おうと 以下のコードを実行したところ、正しくデータが 抽出できませんでした。 DoCmd.TransferText acImportDelim, "", "インポート", "R:\test.txt" テキストファイルを確認したところ、文字列の中に ダッシュ(―)、及び シングルクオテーション(’) が全角で入っている場合にそれを半角として 判断しているようで、その文字列フィールド末尾に 次のフィールドの値が抽出されてしまうようです。 上記記号文字が混入されていないレコードは正しく 取り込まれます。 ちなみにschema.iniの型定義は Col4=テスト Char Width 80 としておりますが、Textに変更しても 同現象が発生します。 定義に誤りがあるのでしょうか、 もしくは当該処理を代用するような機能が ございましたらご教授いただければ幸いです。 何卒よろしくお願いいたします。

  • Access csvの取込 ファイルは任意でテーブルは指定したいのですが?

    Access初心者です。2003を使用しています。 csvをマクロの「テキスト変換」で取り込ませています。取り込み時に定義どおりのテーブルを作成してくれるので、追加クエリを使い作業用テーブルに移動させ、処理にはそちらを使う仕組みにしています。 csv → データ用テーブル → 作業用テーブル(実際使うテーブル) csv取り込みには「テキスト変換」マクロでファイル名にパスを設定していますが、この部分を固定パスではなく任意に指定できるようにしたいのです。(取り込みたいcsvが決まったパス、ファイル名で無い場合があります。) 「コマンドの実行:インポート」ですとダイアログが出て任意に取込ファイルが指定できますが、インポートウィザードが起動してしまいます。使用者がウイザードで適切な定義を選びデータ用テーブルを作成してくれればいいのですが、私がツールを作りPCに詳しくない人が使うのでインポートウイザードを避けたいと考えます。 どなたか、マクロ「テキスト変換」でファイル名をダイアログなどで、任意に指定できるような手法をご存じないでしょうか? また、マクロでは無理なようでしたらVBAでしたら可能でしょうか? よろしくお願いします。

  • ACCESS2007 tinyint型

    tainyint型のテーブルを作成することは可能でしょうか? create table テーブル1 (年 smallint , 月 tinyint); 上記を実行すると、「フィールド定義の構文エラーです。」と なります。 tinyint型のテーブルを作成する、create文を教えてください。 よろしくお願いします。

  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • テーブルの設計はとりあえず文字列で取り込み?

    テーブルの設計はとりあえず文字列で取り込み? こんにちは。会社の上司にSQLについて教えてもらいました(ACCESS2003)。 上司曰く、とりあえずテーブルの設計はvarcharにしておけば大丈夫。 もし取り込んだ値が数値なら、あとで数値に変換する関数で数値に変換して計算行えばいいよと言われました。 とりあえず、文字列なら必ずインポートできるからテーブルのデータ型は全て文字列型。 というのは正しいのでしょうか?様々な型があるのに、すべて文字列型にしてもいいのかなと素朴な疑問が生まれました。 よろしくお願いします。

  • SQLserverでの列の削除について

    SQLserver2000にてSQL文の練習をしている、データベースの初心者です。 SQLserverでは、直接列の削除ができないと聞きました。 ---------------------------------------- ALTER TABLE テーブル名 DROP 列名 ---------------------------------------- ↑このようにはできませんでした。 そこで、いったん削除したい列以外の列がある別のテーブルをつくってからテーブル名を変更する方法として、 1,新しいテーブルを、元のテーブルからデータをコピーして作る。 2,元のテーブルを削除 3,新しいテーブルの名前を元の名前に変更。 という手段を使えばよいという情報を得ましたが、1の部分がどうしてもできません。 (テーブル削除、テーブル名の変更はできました) ---------------------------------------- CREATE TABLE 新しいテーブル名 AS SELECT 削除した列以外の列名 FROM 元のテーブル名 ---------------------------------------- このようにすると、 ---------------------------------------- サーバー : メッセージ 156、レベル 15、状態 1、行 2 キーワード 'AS' 付近に正しくない構文があります。 ---------------------------------------- といわれてしまいます。 EnterpriseManagerを使わずにやる方法が知りたいです。 正しいSQL文をどうかご教授ください。 どうぞよろしくお願いいたします。 ※ちなみにOSはWIN2000を使っています。

  • SSISのフラットファイル取込時のテーブル名について

    SSISにてフラットファイル取り込み、 それをデータアクセスモード「SQLコマンド」にて、 一時テーブルに投入したいのですが、そのような事は可能なのでしょうか? 今まではデータアクセスモードを 「テーブルまたはビュー - 高速読み込み」にて行っていたのですが、 接続マネージャを変更すると事前に一時テーブルを作成しておかないと 設定が出来ないため、この手間を省きたく、「SQLコマンド」にて実施したい と考えました。 どなたか方法をご存知の方、ご教授頂ければ幸いです。

  • Accessのインポートについて

    マイクロソフトアクセス2010でテーブルを作り、そこにCSVファイルを読みこませたいです。 テーブルのフィールドはテキスト型です。 例えば、Table_TESTというテーブルにF1というテキスト型のフィールドを設けます。 Access標準のTEXTインポート機能を使い、インポートを行おうとします。 CSVファイルのデータは、「12345678912345678ABCD」といったように数値とアルファベットです。 なぜか、このようなデータをインポートする時にデータ変換エラーと表示されて、正しくインポートできません。 これは、なぜこのような現象が起こるのでしょうか?

  • 条件のある検索方法

    たびたびお世話になります。 PL/SQLで以下のような検索をしたいのですが、 1つのSQLで実現するにはどのようなSQL文を 書けばいいですか?初心者ですが、よろしくお願いします。 ちなみに、Indexはありません。TABLE_AとTABLE_Bの列は同じです。 ・COL1='plan'、COL2='hokan'でTABLE_Aを検索し、  (1)データがあればTABLE_AのCOL3,COL4をTABLE_Bの   COL3,COL4と結合してTABLE_BのCOL0の値を取得  (2)データがなければCOL1='plan'、COL2='hokan'で  直接TABLE_Bを検索しCOL0の値を取得 よろしくご教示ください。

  • Access2000 固定長テキストと特殊文字インポート定義

    固定長形式で作成したテキストファイルを、新規作成 →テーブルのインポート → 設定 → (あらかじめ作成しておいた固定長の)定義によりインポートは成功するのですが、 必ずα(アルファ)やβ(ベータ)の文字が入っているテキスト型のデータで1バイトのズレが起こります。例えば固定幅で20を指定してもαやβの文字が入っているフィールドでは21バイトまで取り込んでしまいます。 αやβの文字が入っていなければ次のレコードからは問題なく指定どおりにインポートされています。 インポート定義の設定で、どこを訂正したらよいのか分からないため質問させていただきます。