

コマンドの実行端末に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で質問しましょう!
似たような質問が見つかりました
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- その他(スマートフォン・携帯電話・VR) 生成AIの回答は本当ですか? 新スマホにINEデータを引継ぎには? 2 2023/08/18 06:43
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(セキュリティ) androidスマホのデータ移行について 4 2022/10/07 09:10
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
- 格安スマホ・SIMフリースマホ 端末設定画面とアプリのデータ使用量の誤差について 4 2023/04/12 18:02
- Android(アンドロイド) スマホの新端末へのデータ移行について iPhoneの旧端末から新端末へのデータ移行はすごいですね。 1 2022/05/30 14:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
SQLServer(MSDE) JOBの状態取得...
-
オラクルインストールユーザ以...
-
SQLサーバーのジョブでのexeフ...
-
アクションクエリが実行できない
-
ユーザー定義関数内でのsp_exec...
-
ストアドの速度がクエリの30...
-
OracleのPL/SQLの操作方法
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQLサーバ2000へのインポー...
-
SQL SERVER エージェントの権限
-
バッチからメンテナンスプラン...
-
ACCESS(EXCEL)で、ある映像の...
-
DTexec でSSISパッケージを実行...
-
SQLServer2005のストプロでxp_c...
-
SQLServerのジョブからバッチを...
-
ACCESSのツールバー「フォーム...
-
バッチでのSQL実行結果の分岐処...
-
データベース SQL のセッショ...
-
【Oracle】ADOでSELECT * FROM ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
ユーザー定義関数内でのsp_exec...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQLサーバーのジョブでのexeフ...
-
ストアドの速度がクエリの30...
-
SQLCMDにて教えていただきたい...
-
SQLServer2005のストプロでxp_c...
-
SQL-Loaderが動かないです。
-
Excelフィルタ抽出で「検索して...
-
【Oracle】ADOでSELECT * FROM ...
-
sqlcmdでクエリの実行結果をバ...
-
バッチからSQLCMDを実行する方法
-
SQLServerのジョブからバッチを...
-
サーバーと実行端末が違う場合...
-
Accessからストアドプロシジャ...
-
オラクルインストールユーザ以...
-
バッチでのSQL実行結果の分岐処...
-
IDENTITY列を持つテーブルへBCP...
-
100万件レコードdelete
-
UPDATE時のSETの実行順について
おすすめ情報