- 締切済み
SQL ServerのSQL実行時のエラーについて
XXXX.sqlファイルに20万件ほどのクエリが書かれています。 メモリの消費を防ぐために、1行ごとでGOを行い処理をさせています。 SQL ServerのEnterprize ManagerでXXXX.sqlファイル を実行すると(1行処理しました)という表示がされます。 そしてエラーが起きると、エラーが起きた旨と、その行が 表示されるのですが、1行ごと実行させているので、エラーが起きた行を うまく特定できません。 上記のような場合で、エラーが起きた際に、エラーが起きた 該当クエリを知りたいのですが、 何か方法はありますでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
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が失敗したのかすぐに分かる。 ひとまず思いつくのは、こんなところでしょうか。
お礼
ありがとうございます!
補足
やはり手軽ではなさそうですね・・・ もう少し何か方法がないか検討してみます。