

コマンドの実行端末にDBがある場合は成功するのですが、
サーバーが別の端末の場合ファイルが見つからないようです。
データファイルの書き方を変える必要があるのでしょうか?
SQLServerは2008です。
SQLCMD -S"SRV\XXXXXX" -U"user" -P"pass" -d"DB1" -Q"INSERT INTO [テーブル名] SELECT CONVERT(datetime,年月),データ1,データ2,データ3,データ4 FROM OPENROWSET(BULK 'D:\test\bcptest\test.csv', FORMATFILE='D:\test\bcptest\test.fmt',FIRSTROW = 2) x"
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
BCPユーティリティと、sqlcmdユーティリティによるOPENROWSETの違いを認識していただく必要があります。
BCPユーティリティによるINSERTはBCPを実行している端末で行われますが、OPENROWSETはそのクエリが実行されるサーバで行われます。そして、sqlcmdユーティリティは「指定したサーバでのSQL文実行を指示する」ものに過ぎないので、結局後者の方法はサーバにあるファイルを読むことが前提になっているのです。
もともと質問者さんが最初にBCPを使おうとしてできなかったときにも私が回答したのですが、フォーマット変換の難しいファイルを読み込もうとしていたので、SQL Serverがローカルにあることを確認した上で、より柔軟性の高いOPRNROWSETをお勧めしたということです。
前述の通り、本質的な違いがありますから、sqlcmdのローカルフォルダにあるファイルをそのまま指定したところで実現できません。どうしてもという場合は、ローカルフォルダを共有してサーバからアクセスさせる必要があります。
http://msdn.microsoft.com/ja-jp/library/ms175915 …
ただし、そのような使い方(サーバからクライアントの共有フォルダにアクセスする)が想定されたものになるはずがありませんので、その場合はどうしてもBCPを使わなくてはならないでしょう(もしくはSSISか)。フォーマットの問題は一時テーブルを使うなどして回避するしかないと思います。
この回答への補足
ありがとうございます。
本番はDBサーバーのマシンでコマンドを実行するので
問題ないのですが、テスト中は自分の端末でプログラムを開発しています。
プログラムからコマンドファイルを実行するので
自分の端末にコマンドファイルを持ってきています。
No.2
- 回答日時:
> サーバーが別の端末の場合ファイルが見つからないようです。
そのPCには、sqlcmd.exeが存在していますか。
そのPCにSQL Serverがらみの何かをインストールしていれば大丈夫ですが、全く関係していない場合、sqlcmd.exeが存在しないので当然実行できません。
ない場合は、Express edition with advanceなどをインストールするのが手っ取り早いです。
あって、sqlcmdが無効な場合は環境変数に、sqlcmdがあるフォルダパスがあるか確認してみてください。
No.1
- 回答日時:
> 'D:\test\bcptest\test.csv', FORMATFILE='D:\test\bcptest\
どの端末にもフォルダ[D:\test\bcptest\]が存在するのですか?
「フォルダを共有してUNCパスで記述する」とか、他端末からも参照できる状況にする必要があると思います。
この回答への補足
>どの端末にもフォルダ[D:\test\bcptest\]が存在するのですか?
自分の端末(コマンドファイルの実行端末)にのみ存在します。
サーバーのDBに自分の端末にあるデータファイルをアップロードする
イメージになります。
コマンドファイルを実行する端末は自分の端末でも
サーバーにデータファイルがあるか探してしまう仕様なのでしょうか?
サーバーは仮想化された別の端末です。
SQLServer2008がインストールされています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelフィルタ抽出で「検索して...
-
バッチからメンテナンスプラン...
-
Excel-VBAの「しばらくお待ちく...
-
指定時刻のクエリ自動実行
-
SQLServer2005のストプロでxp_c...
-
SQLServer(MSDE) JOBの状態取得...
-
SQLCMDにて教えていただきたい...
-
ストアドプロシージャーでバッ...
-
SQLServerのジョブからバッチを...
-
xp_cmdshellについて
-
データベース SQL のセッショ...
-
ACCESSのツールバー「フォーム...
-
ACCESSからのODBC接続のみ応答...
-
SQLのエラー(~付近に不適切な...
-
SQLServer・ストアドプロシージ...
-
ストアドの戻り値(配列)について
-
レポートが開けない。
-
エクセルマクロで指定範囲内の...
-
(SQLSERVER) 別サーバーへテー...
-
SQL Loaderを使いたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
SQLCMDにて教えていただきたい...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
ユーザー定義関数内でのsp_exec...
-
バッチでのSQL実行結果の分岐処...
-
データベース SQL のセッショ...
-
バッチからSQLCMDを実行する方法
-
Excelフィルタ抽出で「検索して...
-
【Oracle】ADOでSELECT * FROM ...
-
SQLServer2005のストプロでxp_c...
-
ストアドの速度がクエリの30...
-
アクションクエリが実行できない
-
サーバーと実行端末が違う場合...
-
SQLServerのジョブからバッチを...
-
インデックスの断片化が解消さ...
-
sqlcmdでクエリの実行結果をバ...
-
SQLサーバーのジョブでのexeフ...
-
UPDATE時のSETの実行順について
-
静的SQL、動的SQL?
-
SQL-Loaderが動かないです。
おすすめ情報