2011-12-15 14 views
0

オプションとしてqueryoutを使用してBCPプロセスを作成しました。結果として、クエリが実行され、結果が指定された出力ファイルに書き込まれる(または書き込まれる)必要があります。使用されているクエリは、SQLクエリアナライザ(MS SQL 2000を使用)で既知の結果セットを生成するために確認されています。BCP ...クエリアウトの実行により、データが存在することがわかっている行が0行に誤って返される

しかし、BCPコマンドでバッチファイルを実行すると、ゼロ行が返されます(レスポンス "0 rows copied")。しかし、私はこのクエリを取って、それをBCPプロセスの外で(クエリアナライザで)実行し、42,745行を取得できます。また、ビューを作成してより簡単なクエリを実行し、BCP ... queryoutオプションを使用して動作させることもできます。あなたは、クエリが「my_db..buildsから*を選択する」という、より複雑で見ることができるように

bcp "select obj_id, loc_code, CONVERT(VARCHAR(20), create_date, 20) AS build_date, 
model_id, (len(build_string)/4) as feature_count, build_string 
from my_db..builds a, my_db..models b 
where a.model_id = b.model_id and obj_id like '_________C%' and obj_id not like '1G0%'" queryout z:\test.txt -U %1 -P %2 -S SQLSVR\VM_PROD -c 

:私は使用していたクエリが2つのテーブルの情報を結合しています。基本的には、より複雑なクエリを使用してビューを作成した後、bcp ... queryoutを単純な単純なクエリで実行して、ビューからデータを取得するとうまくいきます。なぜ私はBCPコマンドでより複雑なクエリが動作しないのか理解できません。結果を返す前にタイムアウトすることができますか、それともBCPが複雑な "結合スタイル"のクエリを処理する方法を知らないのでしょうか?

+0

あなたはプロファイラトレースを実行し、BCPから渡されたコマンドを調べることができますか? –

+0

私はそれをどうやって行うのか慣れていません...私を啓発することはできますか? – user774512

+0

ちょうどあなたの質問はSQL 2000についてです - http://www.developer.com/db/article.php/3482216/Introduction-to-SQL-Profiler.htmを参照してください –

答えて

0

通常、実行するクエリのビューを作成してその中から選択すると、bcpユーティリティで問題を回避できます。この場合:

CREATE VIEW [MyOutputView] as 
select obj_id, loc_code, CONVERT(VARCHAR(20), create_date, 20) AS build_date, 
... 
... 
and obj_id not like '1G0%' 
GO 

次にbcpコマンドは次のようになります。

bcp "SELECT * FROM MyDb.dbo.MyOutputView" queryout z:\test.txt -U %1 -P %2 -S SQLSVR\VM_PROD -c 
関連する問題