dポイントプレゼントキャンペーン実施中!

XXXX.sqlファイルに20万件ほどのクエリが書かれています。
メモリの消費を防ぐために、1行ごとでGOを行い処理をさせています。

SQL ServerのEnterprize ManagerでXXXX.sqlファイル
を実行すると(1行処理しました)という表示がされます。
そしてエラーが起きると、エラーが起きた旨と、その行が
表示されるのですが、1行ごと実行させているので、エラーが起きた行を
うまく特定できません。

上記のような場合で、エラーが起きた際に、エラーが起きた
該当クエリを知りたいのですが、
何か方法はありますでしょうか。

A 回答 (1件)

1. 実行結果の内容を全部テキストエディタ(メモ帳など)にコピーして、「(1行処理しました)」の数を数える。



とはいえ、20万件もあるのでは実行結果のバッファがあふれて、最後のほうの一部しか残っていないでしょうから・・・

2. isqlやosqlでクエリを流し、実行結果をリダイレクトでテキストファイルに入れる。この方法であれば「実行結果のバッファがあふれて前のほうが見えない」ということなく、実行結果はすべて記録できます。実行完了後に、ゆっくり「(1行処理しました)」の数を数えてください。

数を数えるのが面倒という場合は・・・

3. まず10万件ずつに分割してクエリを流す。エラーが発生したら、その「エラーが発生した側」を再度2つに分割してクエリを流す。これを、1回に流すクエリの件数が手頃な数になるまで繰り返す。最初が20万件なら、2分割を15回繰り返せば6件まで絞り込めます。一度に2分割でなく4分割にすると、4分割を7回繰り返せば12件まで絞り込めます。

もし「クエリ」の内容が「同一テーブルへのinsert」の場合は・・・

4. insertするvaluesの内容に連番のIDを追加し、同じくIDカラムを追加したテスト用テーブルにinsertする。insertが失敗するとIDカラムの連番に穴があくので、検索すればどのinsertが失敗したのかすぐに分かる。


ひとまず思いつくのは、こんなところでしょうか。

この回答への補足

やはり手軽ではなさそうですね・・・
もう少し何か方法がないか検討してみます。

補足日時:2005/09/19 11:04
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2005/10/05 08:54

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

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