2012-02-01 24 views
3

デバッグしようとしているこのトリガがあります。私はそれが挿入しようとしている値を知る必要があります。以下のPrint @ Itemは機能しません。挿入/更新トリガをデバッグして値の挿入/更新を表示する方法

DECLARE @Item VARCHAR(MAX); 



    INSERT INTO [BPRIL DATA ENTRY] 
       ([COMPANY], 
       [CUSTOMER], 
       [ITEM #], 
       [VENDOR], 
       [SEASON], 
       [BPRILP0CaseCost], 
       [CustomerItem#]) 
    SELECT DISTINCT oh.company, 
     oh.customer, 
     @Item = ins.itemnumber, 
     ins.vendor, 
     oh.season, 
     ins.VendorCost, 
     oid.[CustomerSKU] 
    FROM [ORDER HEADER] AS oh 
     LEFT JOIN [Order Item Detail] AS OID 
      ON oh.[ORDER #] = OID.[ORDER #] 
     LEFT JOIN [INSERTED] AS ins 
      ON ins.[ITEM #] = OID.[ITEM #] 
     LEFT JOIN [BPRIL DATA ENTRY] bp 
      ON bp.[COMPANY] = oh.company 
       AND bp.[CUSTOMER] = oh.customer 
       AND bp.[ITEM #] = ins.itemnumber 
       AND bp.[VENDOR] = ins.vendor 
       AND bp.[SEASON] = oh.season 
    WHERE bp.[COMPANY] IS NULL 
     AND bp.[CUSTOMER] IS NULL 
     AND bp.[ITEM #] IS NULL 
     AND bp.[VENDOR] IS NULL 
     AND bp.[SEASON] IS NULL 
     AND (OID.[STATUS] = 'C' 
     OR OID.[STATUS] = 'I') 
     AND ins.[VENDOR] IS NOT NULL 
     AND ins.[QUOTE #] IS NOT NULL 
     AND ins.[VENDORCOST] IS NOT NULL 

Print @Item; 
+0

に挿入するトリガーを走りましたか?なぜ@Item変数? ins.itemnumberはテーブルにあります[BPRIL DATA ENTRY] – William

+0

@Itemは私が見たいと思っていた変数なので、その変数をデバッグの目的で作成しました。 – Bruno

答えて

1

私はテーブルを作成しました:

CREATE TABLE DebugTrace 
(
    [COMPANY] NVARCHAR(2), 
    [CUSTOMER] NVARCHAR(255), 
    [ITEM #] NVARCHAR(35), 
    [VENDOR] NVARCHAR(50), 
    [SEASON] INT, 
    [BPRILP0CaseCost] MONEY, 
    [CustomerItem#] NVARCHAR(50) 
) 

あなたは[BPRIL DATA ENTRY]テーブルからそれを選択することはできませんそして、私はDebugTraceの代わりに、[BPRIL DATA ENTRY]

1

変数を設定してテーブルに挿入することはできません。これを2つの別々のクエリで行う必要があります。

9

@ cadrell0が正しい場合は、insert文で変数に何かを設定しないでください。また、トリガー内のスカラー変数に何かを設定する必要はありません。挿入されたテーブルと削除されたテーブルは、複数の行を持ち、複数の値を持つことがあります。あなたは、をトリガーとしてに設定して考える必要があります。

しかし、トリガーを開発して何が起こっているかを見るための私のプロセスです。

最初に、私はトリガーの外にあるコードを見つけ出します(これは、大きな変更のために作業をしている間に既存のトリガーを削除することを意味します)。

私は、挿入されたテーブルと削除されたテーブルをスクリプト内の一時テーブルとして設定しています(実際のテーブルを切り出して名前を変更すると、これを簡単にすることができます)。私は複数のレコード(非常に重要!)と私のテストケースを満足させるデータをそれらに設定するようにしています。

次にコードを作成し(マイナストリガー部分)、#insertedテーブルおよび/または#deletedテンポラリテーブルを、挿入または削除を使用する場所で使用します。今度は、一度に1つのパートを実行し、必要に応じて途中で結果を確認することができます。私はすべてをトランザクションに入れて、最後にロールバックすることで、同じテストデータを繰り返し使用して、正しく取得できるようにします。

私がしたいことがわかったら、トランザクション、一時テーブルコード、テストコードを削除し、#記号を何も置き換えないようにします(トリガー専用のテーブルが挿入され、 /または削除された)。次に、作成トリガーコードを追加してトリガーを作成します。

関連する問題