アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer2005を使用しています。
テーブルのデータをCSVファイルでエクスポートしたいのですが
ネットで調べてもどうもうまくいかないので質問させてください。

サーバー名:PCSQL、ユーザ名:User、パスワード:PASS
として以下のようなプログラムを実行したのですが、
--------------------------
EXEC master..xp_cmdshell 'bcp "select * from データベース名.dbo.テーブルA"
queryout c:\log.csv -c -t"," -r"\n" -SPCSQL -UUser -PPASS'
--------------------------

以下のような結果が出てくるだけでCSVファイルが作成されません。

使用法: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m 最大エラー数] [-f フォーマット ファイル] [-e エラー ファイル]
[-F 先頭行] [-L 最終行] [-b バッチ サイズ]
[-n ネイティブ型] [-c 文字型] [-w UNICODE 文字型]
[-N text 以外のネイティブ型を保持] [-V ファイル フォーマットのバージョン] [-q 引用符で囲まれた識別子]
[-C コード ページ指定子] [-t フィールド ターミネータ] [-r 行ターミネータ]
[-i 入力ファイル] [-o 出力ファイル] [-a パケット サイズ]
[-S サーバー名] [-U ユーザー名] [-P パスワード]
[-T 信頼関係接続] [-v バージョン] [-R 地域別設定有効]
[-k NULL 値を保持] [-E ID 値を保持]
[-h "読み込みヒント"] [-x XML フォーマット ファイルを生成]
NULL

そもそもSQLにはWindows認証でログインしているので
ユーザーIDとかいらないのでしょうか?(ユーザーID,PASSを抜いても同じ結果となってしまいますが・)

SQL初心者で申し訳ないのですがご教授宜しくお願いします。

A 回答 (4件)

途中で改行してはだめですよ。

    • good
    • 0
この回答へのお礼

回答有難うございます。
ナント、改行してはダメだったんですね。

しかしこんなエラーがでてしまいました。
-----------------------------------------------
SQLState = 08001, NativeError = 2
Error = [Microsoft][SQL Native Client]名前付きパイプのプロバイダ : SQL Server への接続を開けませんでした [2].
SQLState = HYT00, NativeError = 0
Error = [Microsoft][SQL Native Client]ログイン タイムアウトが時間切れになりました
SQLState = 08001, NativeError = 2
Error = [Microsoft][SQL Native Client]サーバーへの接続確立時にエラーが発生しました。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート接続を許可していないことが原因である可能性があります。
NULL
----------------------------------------------
どうもサーバーとうまく接続できていないみたいです・・・
クエリを開くときにサーバーとは接続しているのに
クエリ実行時にはサーバーと接続されていないのでしょうか?

単純にselect * from ~で出た結果をCSVにエクスポートしたいだけなのですが1000回以上行う必要があるんでとても手動ではできません。
現状エクセル側からSQLのデータを吸い取ってCSVにしてるんですが物凄い時間がかかる為、出来ればSQLServerから直接CSVファイルにしたいのですが簡単な方法はないでしょうか。
(コマンドプロンプトからbcpコマンドでやろうと思ったのですが同じくうまくいきませんでした;)

お礼日時:2009/08/26 15:02

BCPが自動では一番楽な方法でしょう。


Windows認証しているのなら、
bcp "select * from データベース名.dbo.テーブルA" queryout c:\log.csv -c -t"," -r"\n" -SPCSQL -T
でどうですか?
    • good
    • 0
この回答へのお礼

回答有難うございます。 ですがうまくいきません
同じエラーが出てしまいました
------------------------------------------------------
SQLState = 08001, NativeError = 2
Error = [Microsoft][SQL Native Client]名前付きパイプのプロバイダ : SQL Server への接続を開けませんでした [2].
SQLState = HYT00, NativeError = 0
Error = [Microsoft][SQL Native Client]ログイン タイムアウトが時間切れになりました
SQLState = 08001, NativeError = 2
Error = [Microsoft][SQL Native Client]サーバーへの接続確立時にエラーが発生しました。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート接続を許可していないことが原因である可能性があります。
NULL

試しにコマンドプロンプトでもやってみたんですが同じエラーメッセージが出てきました。

お礼日時:2009/08/26 15:36

bcpというのはもともとコマンドラインから実行するユーティリティです。


クエリアナライザからxp_cmdshellで実行すると、バッチコマンドとしてbcpが実行され、今のクエリアナライザの接続とは別にSQL Serverに接続しようとします。
それがうまくいっていないのですが。

対象のSQL Serverは別マシンにあるんですか?
もしそうなら、サーバでマシン名を「localhost」にしても同じことになりますか?

SSMSから接続するときもPCSQLという名前で接続していますか?
PCSQLはSQL Server認証も許可されていますか?

実際のサーバ名は「PCSQL\AAA」のように「\」マークがついているということはありますか?
コマンドラインから「cliconfg」と打って開くユーティリティの別名タブに何か登録してありますか?
    • good
    • 0
この回答へのお礼

ご回答有難うございます。
SQLServerは別のマシンにあります。
サーバーに接続する際は
----------------------
サーバーの種類:データベースエンジン
サーバー名:PCSQL\sql2005th (sql2005th⇒サーバー名)
認証:Windows認証
----------------------
で接続しています。
と、ここで気付きました。サーバー名は[マシン名\サーバー名]を入れなきゃダメなんですね;

以下をコマンドプロンプトで流したところ
bcp "select * from データベース名.dbo.テーブルA" queryout c:\log.csv -c -t"," -r"\n" -SPCSQL\sql2005th -T
結果が出来ました。有難うございます!

ただ、列名が出てこず、1行目からデータが入っているのですが
列名を入れることは無理なのでしょうか?
質問ばっかりでスイマセン!宜しくお願いします

お礼日時:2009/08/26 17:37

bcpにはヘッダーを指定する機能がないんですよ。


別にヘッダーファイルを用意して足してあげるしかないかもしれませんね。
それを自動でやるスクリプトを以前載せたことがあったのですが、ちょっとやりすぎの感もあるので、あえてここでは紹介しません。
(あとはSSISパッケージを使う方法になってしまうので、さすがに敷居が高いですかね)
    • good
    • 0
この回答へのお礼

分かりました。回答有難うございましたm(_ _)m

お礼日時:2009/08/27 10:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す