2011-06-22 5 views
0

SQL Server 2005で複数のネストされたサブクエリを使用して複雑なクエリをデバッグする方法を教えてください。TSQLのサブクラスのデバッグストアドプロシージャ

私はVisual Studio 2005でストアドプロシージャとトリガをデバッグしています。これらのサブクエリの結果がどのようなものかを知りたいのですが、バグがどこから来たのかが分かります。クエリの例(少し編集済み)は以下の通りです:

UPDATE 
       foo 
      SET 
       DateUpdated = (SELECT TOP 1 inserted.DateUpdated FROM inserted) 
       ... 
      FROM 
       tblEP ep 
       JOIN tblED ed ON ep.EnrollmentID = ed.EnrollmentID 
      WHERE 
       ProgramPhaseID = (SELECT ...) 

Visual Studioは、私は、サブクエリの結果を見るための方法を提供していないようです。また、一時テーブルを使用して結果を格納すると(一時テーブルは別の場所でも使用されます)、そのテーブルに格納されている値を表示することはできません。

私は腕時計を追加することができますか他の方法でこれらのサブクエリを見ることができますか?クエリ自体を「ステップイン」する方法があれば、私はそれが大好きですが、それは不可能だと思います。

答えて

0

これは私がこの種のscenerioで通常行っていることです。 各サブクエリによって生成される正確なsqlsを出力します。 次に、前述のようにManagement Studioでそれぞれを実行します。 異なるパーツがあなたに期待する正しいデータを提供しているかどうかを確認する必要があります。

1

最初に、トリガーでサブクエリを使用することに注意してください。トリガはできるだけ高速でなければならないため、セットベースの方法ではなく行ごとに実行される相関サブクエリを取り除く必要があります。ジョインに書き直す。挿入された表の内容に基づいてレコードのみを更新する場合は、その表に結合します。更新しているテーブルにも参加します。まさにこのトリガーで何を達成しようとしていますか?実装しようとしているビジネスルールを理解していれば助言をする方が簡単かもしれません。

トリガーをデバッグするには、これが必要です。

私はスクリプトを書く:

  • 、その上にトリガーなしのテーブル への実際の挿入が を#inserted(および/または#DELETEDという名前の1)という名前の一時テーブルを作成してください

    1. 予想通りにテーブルを作成します。 挿入されたテーブルをトリガーに挿入して、 に挿入します。
    2. トリガーコード( トリガーパーツを作成または変更しない)を追加して、 参照が挿入されるたびに#を挿入した を追加します。あなたが明示的なトランザクションとあなたの 結果を確認した後 ロールバック中にトリガー投げ それでそれを使用する 準備が整うまで、あなたが 実行するために複数回を予定している場合。
    3. ( )■(テーブルをチェックするために、クエリを追加あなたが変更したい 値のためのトリガで変更されている。
    4. 今、あなたはステップ間 を何が起こっているかを確認するために 文をデバッグ追加する必要がある場合、あなたはそうすることができます。
    5. 変更を行う実行あなたが得るまで 結果が必要です。
    6. としてクエリを実行したら、 を#記号を挿入して取り除き、 を使用してトリガーの本文を作成するのは簡単です。