- ベストアンサー
SQLServer2005データのCSVファイルエクスポート方法
- SQLServer2005を使用してテーブルのデータをCSVファイルでエクスポートする方法を教えてください。
- EXEC master..xp_cmdshellを使用してCSVファイルを作成するプログラムを実行してもファイルが作成されないため、エラーの原因を教えてください。
- SQLServerにはWindows認証でログインしているため、ユーザーIDとパスワードは必要ないのかどうか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
bcpというのはもともとコマンドラインから実行するユーティリティです。 クエリアナライザからxp_cmdshellで実行すると、バッチコマンドとしてbcpが実行され、今のクエリアナライザの接続とは別にSQL Serverに接続しようとします。 それがうまくいっていないのですが。 対象のSQL Serverは別マシンにあるんですか? もしそうなら、サーバでマシン名を「localhost」にしても同じことになりますか? SSMSから接続するときもPCSQLという名前で接続していますか? PCSQLはSQL Server認証も許可されていますか? 実際のサーバ名は「PCSQL\AAA」のように「\」マークがついているということはありますか? コマンドラインから「cliconfg」と打って開くユーティリティの別名タブに何か登録してありますか?
その他の回答 (3)
- jamshid6
- ベストアンサー率88% (591/669)
bcpにはヘッダーを指定する機能がないんですよ。 別にヘッダーファイルを用意して足してあげるしかないかもしれませんね。 それを自動でやるスクリプトを以前載せたことがあったのですが、ちょっとやりすぎの感もあるので、あえてここでは紹介しません。 (あとはSSISパッケージを使う方法になってしまうので、さすがに敷居が高いですかね)
お礼
分かりました。回答有難うございましたm(_ _)m
- jamshid6
- ベストアンサー率88% (591/669)
BCPが自動では一番楽な方法でしょう。 Windows認証しているのなら、 bcp "select * from データベース名.dbo.テーブルA" queryout c:\log.csv -c -t"," -r"\n" -SPCSQL -T でどうですか?
お礼
回答有難うございます。 ですがうまくいきません 同じエラーが出てしまいました ------------------------------------------------------ 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 試しにコマンドプロンプトでもやってみたんですが同じエラーメッセージが出てきました。
- jamshid6
- ベストアンサー率88% (591/669)
途中で改行してはだめですよ。
お礼
回答有難うございます。 ナント、改行してはダメだったんですね。 しかしこんなエラーがでてしまいました。 ----------------------------------------------- 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コマンドでやろうと思ったのですが同じくうまくいきませんでした;)
お礼
ご回答有難うございます。 SQLServerは別のマシンにあります。 サーバーに接続する際は ---------------------- サーバーの種類:データベースエンジン サーバー名:PCSQL\sql2005th (sql2005th⇒サーバー名) 認証:Windows認証 ---------------------- で接続しています。 と、ここで気付きました。サーバー名は[マシン名\サーバー名]を入れなきゃダメなんですね; 以下をコマンドプロンプトで流したところ bcp "select * from データベース名.dbo.テーブルA" queryout c:\log.csv -c -t"," -r"\n" -SPCSQL\sql2005th -T 結果が出来ました。有難うございます! ただ、列名が出てこず、1行目からデータが入っているのですが 列名を入れることは無理なのでしょうか? 質問ばっかりでスイマセン!宜しくお願いします