1

トリガーによって生成されたいくつかの疑わしいデータベース トランザクションをデバッグしようとしましたが、T-SQL をステップ実行すると、予期しない結果が発生しました。を介してカーソルから値を取得した後FETCH NEXT FROM Updated_Cursor、while ループに入り、カーソルからフェッチされた行ごとに 2 つの変数を評価して、次のような処理の後に挿入が行われるかどうかを判断します。

WHILE @@FETCH_STATUS = 0
BEGIN
      IF (@first_indicator > 0 AND @second_indicator >0)
      BEGIN
              --processing and insert occurs here

@first_indicator=1デバッグ モードでコードをステップ実行すると、 の値とこの条件が true に評価されていることがわかりますが、@second_indicator=0これは意味がありません。その結果、重複した誤った行が挿入されます。2 つの変数はbitデータ型であり、関連性があると思われますが、なぜこれが起こっているのかわかりません。

4

1 に答える 1

1

次のようにカーソルからコードを引き出す場合:

DECLARE @f BIT = 1
DECLARE @s BIT = 0

IF(@f>0 AND @s>0) PRINT 'GH';

期待どおりに動作し、印刷されません。if ステートメントが実行されたときに、適切なタイミングで適切な変数を見ていると確信していますか?

また、IFコメントで言及した2つのステートメントは同等ではありません。したがって、あなたの実際の質問が何であるか正確にはわかりません。

于 2013-02-12T14:43:15.337 に答える