Question

hiyasuda_SQLazure on Wed, 15 Aug 2012 02:39:11


以下の条件でタイトルの現象が再現します。

1. Windows Azure上にSQL database: SAMQNDを作成する。

2. SAMQND上にcreate tableで table: QND_Aを作成する。

3. リモートのwindows7パソコンのコマンドプロンプトから下記のbcp.exeを実行した結果は下記の通り。

>bcp SAMQND.dbo.QND_A in D:\test\QND_A.CSV -f D:\test\form_QND_
A -S ot42kj48yt.database.windows.net -U saadmin@ot42kj48yt
パスワード:

コピーを開始しています...

0 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 240

4. csvファイルのデータは1行で、下記の通り、unicodeで保存している。

SAMINVO,8158ad82c83d9f1e75a8a46fef96b6ca,20120608,Adobe Photoshop,C

5. フォーマットファイルは対話型で作成し、保存している。下記の通り。

10.0
5
1       SQLCHAR             8       255     "none"       1     タスク名               SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR             8       255     "none"       2     ホストID             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR             8       255     "none"       3     インベントリ取得日     SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR             8       255     "none"       4     登録パス               SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR             8       255     "none"       5     インストールパス       SQL_Latin1_General_CP1_CI_AS

コピーされない原因がわかりません。アドバイスをお願いします。

Replies

hiyasuda_SQLazure on Fri, 17 Aug 2012 08:08:05


質問内容を英語に翻訳しました。

title:

Since a csv file have data, the execution result of bcp.exe mean that "0 line copy was carried out."

---------------------------------------------------------------------------------------------------------------
The phenomenon of a title reappears on condition of the following.


1. An SQL database on Windows Azure is created. The name is SAMQND. 


2. An SQL table on SAMQND database is created by using a create table command. The name is QND_A.


3. The result of having performed following bcp.exe from the command prompt of windows7 remote personal computer is as follows.


>bcp SAMQND.dbo.QND_A in D:\test\QND_A.CSV -f D:\test\form_QND_
 A -S ot42kj48yt.database.windows.net -U saadmin@ot42kj48yt
password:

The copy is started. ...


0 line copy was carried out.

Network   Packet   Size (byte): 4096
Clock   Time (millisecond) Sum total: 240


4. The number of the data of a csv file is one, and it saves it by unicode as follows.


SAMINVO,8158ad82c83d9f1e75a8a46fef96b6ca,20120608,Adobe Photoshop,C


5. The format file is created and saved by the interactive system.
The following passage.


10.0
 5
 1       SQLCHAR             8       255     "none"       1     タスク名               SQL_Latin1_General_CP1_CI_AS
 2       SQLCHAR             8       255     "none"       2     ホストID             SQL_Latin1_General_CP1_CI_AS
 3       SQLCHAR             8       255     "none"       3     インベントリ取得日     SQL_Latin1_General_CP1_CI_AS
 4       SQLCHAR             8       255     "none"       4     登録パス               SQL_Latin1_General_CP1_CI_AS
 5       SQLCHAR             8       255     "none"       5     インストールパス       SQL_Latin1_General_CP1_CI_AS


The cause which is not copied is not known.
Please advise me.

 

hiyasuda_SQLazure on Wed, 22 Aug 2012 15:58:11


以下のMSDNフォーラムの記事が解決のヒントとなった。

http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/11743a66-a8c2-4549-b404-192dc5e037d8

My guess is that the format file is in Unicode format, why BCP thinks it's an XML file when it's not. Open the
file in Notepad and save it with Save As. There is a format option in this dialog.

根本原因は、“フォーマットファイルの文字コード系がunicodeの場合、bcpコマンドはxmlファイルとする仕様である。” こととした。

試行錯誤の後、概略であるが、以下の対処方法で解決した。

1.フォーマットファイルの文字コード系をANSIに変更して、再実行したら、bcpコマンドが正常終了した。

2.CSVファイルの文字コード系をANSI二変更して、再実行したら文字化けは解決した。

3.SQL Azureの管理ポータルでテスト用のテーブルを削除する、

4.SQL Azureの管理ポータルで下記のようにCLUSTEREDインデックス付きでテーブルを作成する。

CREATE TABLE [QND_A] (
        [タスク名] [varchar] (255) NULL ,
        [ホストID] [varchar] (255) NULL,
        [インベントリ取得日] [varchar] (255) NULL ,
        [ソフトウェア名] [varchar] (255) NULL ,
        [登録パス] [varchar] (255) NOT NULL
          PRIMARY KEY CLUSTERED,
        [インストールパス] [varchar] (255) NULL
)
GO

4. bcpコマンドでフォーマットファイル(non-XMLファイル)を作成  for character data

bcp SAMQND.dbo.QND_A format nul -c -f C:\test\bcp20120822.fmt -S yyyyyyyy.database.windows.net -U xxx@yyyyyyyy

作成されたフォーマットファイルbcp20120822.fmt

10.0
6
1       SQLCHAR             0       255     "\t"     1     タスク名               SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR             0       255     "\t"     2     ホストID             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR             0       255     "\t"     3     インベントリ取得日     SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR             0       255     "\t"     4     ソフトウェア名         SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR             0       255     "\t"     5     登録パス               SQL_Latin1_General_CP1_CI_AS
6       SQLCHAR             0       255     "\r\n"   6     インストールパス       SQL_Latin1_General_CP1_CI_AS

5.項4で作成したフォーマットファイルを使用してbcpコマンドでSQL Azuredeデータベースにインポート

bcp SAMQND.dbo.QND_A in C:\test\QND_A.CSV -f C:\test\bcp20120822.fmt -S yyyyyyyy.database.windows.net -U xxx@yyyyyyyy


パスワード:

コピーを開始しています...

2 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 672    平均 : (2.98 行/秒)

以上で解決しました。