2017-09-08 7 views

答えて

1

一般コードはこの

Create Proc test_act_sp 
AS 
BEGIN 
    WHILE (1=1) 
     BEGIN 
      WAITFOR 
      ( 
       RECIEVE TOP(1) ... FROM Queue 
      ) , TIMEOUT 3000; --Timeout value can be changed. 

      IF (@@ROWCOUNT = 0) 
      BEGIN 
       BREAK; 
      END 
     ........ 
     ........ 
     ........ 
    END 
END 

ように見える起動処理が無限ループ内でのメッセージ処理を開始し、それはTIMOUT間隔内の任意のメッセージ(上記の例では3秒)を受け取るしない場合、プロシージャは意志終了させる。

大量のメッセージをキューに送信すると、アクティブ化手順が開始され、すべてのセット(起動後のメッセージを待機する)に1回メモリにロードされ、その3秒後にシャットダウンされます最後に受信したメッセージ。したがって、この場合のwhileループはサーバーのオーバーヘッドを減らします。

ループを省略することはできますが、この場合、キュー内の各メッセージに対してアクティブ化手順がトリガされ、パフォーマンスの問題が発生する可能性があります。

0

、それはコマンドの構文です。

無限にループするWHILEループを書きたい場合、常に真を返す式を書く必要があります。 1=1はそのうちの一つですが、あなたは常に返す何かを書くことができ0=010=10など)

1

それはあなたが継続的にキューを処理するかどうかに依存します。 (1=1) は常にtrueであり、アイテムがキューに表示されて処理されるまで無限ループを作成します。

単一のアイテムだけを処理するアクティベーションプロシージャを作成する場合は、ループはまったく必要ありません。

関連する問題