ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4016157 bcpコマンドでDECIMAL型のデータとしてインポートできません。
質問者:milkldap 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(百万円) ""
困り度:
  • 困っています
質問投稿日時:
08/05/12 10:50
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

ANo.3 私の環境(SQL Server 2005 developer edition)では列名が長すぎるのが、
悪さをしているようです。
回答者:nora1962
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/15 10:24
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.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コマンドはビューに対して実行してください)
回答者:nora1962
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/14 21:36
この回答への補足ありがとうございます。
列名を短くしてビューを作成してビューにインポートしてみました。
全部SQLCHARでやってみました。

キャストした文字コードが正しくありませんといわれます。
DECIMAL型も含めたフォーマットファイルでやると
インポートできますが、前回と同様に数値の部分のデータ
が全部0になります。

そちらの環境ではうまくいっているということでしょうか?
この回答へのお礼ありがとうございます。
テーブル定義が全部varcharのときはbcp -cで
正常にインポートできました。
でも全部文字列でインポートすると数値の比較が
うまくいかなくなってしまって。

列名やSQLCHAR 0 42の42バイトのところに
原因がありそうということでしょうか?

回答

ANo.1 > すべてSQLCHAR型にするとキャストした文字コードが正しくありませんといわれます。
このときのフォーマットファイルをどう指定したのかとインポートする
テーブル定義を教えてください。
回答者:nora1962
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/05/13 13:19
この回答への補足ありがとうございます。

ファイルフォーマットは上記のようです。
コマンド文とテーブル定義は以下のようです。
よろしくお願いします。

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
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示