• 締切済み

bcpコマンドでDECIMAL型のデータとしてインポートできません。

bcp -f で以下のようなフォーマットファイルを使用しました。 文字データは正しくインポートされるのですが、数値データがすべて0となって正しくインポートされません。 すべてSQLCHAR型にするとキャストした文字コードが正しくありませんといわれます。 正常に数値データをDECIMAL型のデータとしてインポートする方法を 教えていただけないでしょうか? 9.0 12 1 SQLCHAR 0 200 "\t" 1 企業コード Japanese_CI_AS 2 SQLCHAR 0 200 "\t" 2 顧客名漢字 Japanese_CI_AS 3 SQLCHAR 0 200 "\t" 3 主業種 Japanese_CI_AS 4 SQLCHAR 0 200 "\t" 4 従業種 Japanese_CI_AS 5 SQLDECIMAL 0 19 "\t" 5 全国順位社数 "" 6 SQLDECIMAL 0 19 "\t" 6 全国順位 "" 7 SQLDECIMAL 0 19 "\t" 7 資本金(千円) "" 8 SQLDECIMAL 0 19 "\t" 8 従業員数 "" 9 SQLCHAR 0 50 "\t" 9 決算年月1 Japanese_CI_AS 10 SQLDECIMAL 0 19 "\t" 10 年商1(百万円) "" 11 SQLCHAR 0 50 "\t" 11 決算年月2 Japanese_CI_AS 12 SQLDECIMAL 0 19 "\r\n" 12 年商2(百万円) ""

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

私の環境(SQL Server 2005 developer edition)では列名が長すぎるのが、 悪さをしているようです。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

これが最適なやり方か私も分かりませんが当座のしのぎ方として。 (1)項目名を短くするためにビューを作る create view v_企業詳細 ( [企業コード], [顧客名漢字], [主業種], [従業種], [全国順位社数], [全国順位], [資本金], [従業員数], [決算年月1], [年商1], [決算年月2], [年商2] ) as select * from 企業詳細 (2)フォーマットファイルではSQLCHARで指定する 8.0 12 1 SQLCHAR 0 50 "\t" 1 企業コード Japanese_CI_AS 2 SQLCHAR 0 200 "\t" 2 顧客名漢字 Japanese_CI_AS 3 SQLCHAR 0 200 "\t" 3 主業種 Japanese_CI_AS 4 SQLCHAR 0 200 "\t" 4 従業種 Japanese_CI_AS 5 SQLCHAR 0 42 "\t" 5 全国順位社数 "" 6 SQLCHAR 0 42 "\t" 6 全国順位 "" 7 SQLCHAR 0 42 "\t" 7 資本金 "" 8 SQLCHAR 0 42 "\t" 8 従業員数 "" 9 SQLCHAR 0 50 "\t" 9 決算年月1 Japanese_CI_AS 10 SQLCHAR 0 42 "\t" 10 年商1 "" 11 SQLCHAR 0 50 "\t" 11 決算年月2 Japanese_CI_AS 12 SQLCHAR 0 42 "\r\n" 12 年商2 "" 画面では連続した空白がまとめられてしまいますが、カラム位置は守って作成してください。 これでやってみてください。(bcpコマンドはビューに対して実行してください)

milkldap
質問者

お礼

ありがとうございます。 テーブル定義が全部varcharのときはbcp -cで 正常にインポートできました。 でも全部文字列でインポートすると数値の比較が うまくいかなくなってしまって。 列名やSQLCHAR 0 42の42バイトのところに 原因がありそうということでしょうか?

milkldap
質問者

補足

ありがとうございます。 列名を短くしてビューを作成してビューにインポートしてみました。 全部SQLCHARでやってみました。 キャストした文字コードが正しくありませんといわれます。 DECIMAL型も含めたフォーマットファイルでやると インポートできますが、前回と同様に数値の部分のデータ が全部0になります。 そちらの環境ではうまくいっているということでしょうか?

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

> すべてSQLCHAR型にするとキャストした文字コードが正しくありませんといわれます。 このときのフォーマットファイルをどう指定したのかとインポートする テーブル定義を教えてください。

milkldap
質問者

補足

ありがとうございます。 ファイルフォーマットは上記のようです。 コマンド文とテーブル定義は以下のようです。 よろしくお願いします。 bcp ○○.dbo.企業詳細 in %PATH%企業詳細.txt" -f%PATH%bcp.fmt3" -S PC名\sqlexpress -T USE [○○] GO /****** オブジェクト: Table [dbo].[企業詳細] スクリプト日付: 05/13/2008 18:48:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[企業詳細]( [企業コード] [varchar](50) NOT NULL, [顧客名漢字] [varchar](200) NULL, [主業種] [varchar](200) NULL, [従業種] [varchar](200) NULL, [全国順位社数] [decimal](18, 0) NULL, [全国順位] [decimal](18, 0) NULL, [資本金(千円)] [decimal](18, 0) NULL, [従業員数] [decimal](18, 0) NULL, [決算年月1] [varchar](50) NULL, [年商1(百万円)] [decimal](18, 0) NULL, [決算年月2] [varchar](50) NULL, [年商2(百万円)] [decimal](18, 0) NULL, CONSTRAINT [PK__企業詳細__16EE5E27] PRIMARY KEY CLUSTERED ( [企業コード] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF

関連するQ&A