2010-11-18 13 views

答えて

1

複雑なストアドプロシージャのトラブルシューティングは、実行するかどうかを判断するだけでなく、実行されないステップを見つけることよりもはるかに重要です。最も重要なことは、実際にコアテストの結果を返すのか、正しいアクションを実行するのかです。

2つの種類のストアドプロシージャがあります。まず、動的SQLを作成するproc。 @debugの入力パラメータなしでこれらのうちの1つを作成することはありません。このパラメータが設定されている場合、私はprocがSQlステートメントを実行したものとして表示し、実行しません。ほとんどの場合、生成されたSQLコードで構文エラーが表示されるため、すぐに問題が発生します。また、このSQLコードを実行して、期待するレコードが返されているかどうかを確認することもできます。

データに影響するステップが多い複雑なprocsでは、@test入力パラメーターを使用します。 @testパラメータで行うことは2つあります。まず、開発の失敗がデータを壊さないように、アクションをロールバックします。次に、ロールバックする前にデータを表示して、結果がどのようなものかを確認します。 (これらは実際には逆の順序で表示されますが、私はこの順序で考えています)

これで、データに永久に影響を与えることなく、テーブルに何が入っているのか、テーブルから削除されたのかを確認できます。場合によっては、データの一部をアクションの前と同じように選択してから、それを後で選択ランと比較することもあります。

最後に、複雑なprocのアクションをログに記録し、何が起きたかを正確に確認したいことがあります。 procがエラーを起こした場合、それらのログをロールバックしたくないので、私はprocの始めに必要なログ情報のテーブル変数を設定します。各ステップの後(または何をログに記録するかによってエラーが発生した後)、このテーブル変数に挿入します。ロールバックまたはコミットステートメントの後、テーブル変数の結果を選択するか、またはこれらの結果を使用して永続ロギングテーブルにログします。これは、実行されたSQLをログに記録できるため、動的SQLを使用していて、何か奇妙なものがprodで失敗したときに、失敗したときに実行されたステートメントのレコードがある場合に特に便利です。これは、ロールバックで範囲外にならないため、テーブル変数で行います。

1
  1. ストアドプロシージャの外部にあるそれぞれSELECTステートメント(存在する場合)をテストして、期待どおりの結果が返されるかどうかを確認します。
  2. INSERTUPDATEをできるだけ単純にします。
  3. あなたのSPの外にインサートとアップデートをテストして、期待どおりの結果が得られているかチェックできるようにしてください。
  4. SSMSエクスプレス2008
1

のVisual Studio 2010分の2008で提供デバッガを使用してデバッグ機能を持っています。 「サーバーエクスプローラ」でSQL Serverインスタンスに接続し、ストアドプロシージャを参照するだけです。

Visual Studio 'テスト版'は、ストアドプロシージャの周りに単体テストを生成することもできます。

+0

私はそれを知らなかった、あなたはvs2010を介してSQL Serverに接続する方法を知っていますか?私にステップを提供したり、話しているブログに私をリダイレクトしたりできます。 –

+0

このリンクは、プロセス全体を説明しています。http://support.microsoft.com/kb/316549 – Andrew

-1

SSMSでは、プロシージャを開き、メニューバーの[実行]ボタンの横にあるチェックマークボタン([解析])をクリックするだけで簡単に開始できます。見つかったエラーを報告します。

エラーがなければ、プロシージャを実行することは無害です(テーブルに挿入するのではなく、一時テーブルを作成するだけです)。CREATE PROCEDURE x(またはALTER PROCEDURE x )、その部分をコピーしてすべてのパラメータを宣言し、有効な値で定義します。次に、それを実行して何が起こるかを確認します。

多分これは簡単ですが、それは始める場所です。

関連する問題