sql >> データベース >  >> RDS >> Sqlserver

SQL ServerのSleep()と同等:WAITFORステートメント

    SQL Serverでは、WAITFORを使用できます バッチ、ストアドプロシージャ、またはトランザクションの実行を遅らせるステートメント。

    MySQLのsleep()と同様に機能します 働き。

    実際には、おそらくPostgresの3つの「スリープ」関数の組み合わせのようなものです:pg_sleep()pg_sleep_for() 、およびpg_sleep_until()

    これは、SQLServerのWAITFOR ステートメントには、実行が続行されるまでの時間遅延または実際の固定時間を指定するオプションがあります。

    例–遅延を指定する

    時間遅延を指定するには、DELAYを使用します 引数の後に、待機/スリープする実際の時間が続きます。

    遅延は最大24時間です。

    実例を示します。

    SELECT CURRENT_TIMESTAMP AS [First Timestamp];
    WAITFOR DELAY '00:00:10';
    SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

    結果:

    Time: 11.137s (11 seconds)
    +-------------------------+
    | First Timestamp         |
    |-------------------------|
    | 2020-06-29 00:02:30.963 |
    +-------------------------+
    (1 row affected)
    Commands completed successfully.
    +-------------------------+
    | Second Timestamp        |
    |-------------------------|
    | 2020-06-29 00:02:41.610 |
    +-------------------------+
    (1 row affected)

    DELAYを使用する場合 オプションの場合、値はhh:mm [[:ss].mss]としてフォーマットされます。

    値は日時のいずれかで指定できます データ形式、またはローカル変数として。ただし、日付は指定できないため、日時の日付部分 値は許可されていません。

    例–時間を指定する

    または、TIMEを使用することもできます バッチ、ストアドプロシージャ、またはトランザクションが実行される時間を指定する引数。

    この場合、提供される値は、WAITFORが実行された時刻です。 ステートメントが終了します。

    実例を示します。

    SELECT CURRENT_TIMESTAMP AS [First Timestamp];
    WAITFOR TIME '04:33:30';
    SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

    結果:

    Time: 39.487s (39 seconds)
    +-------------------------+
    | First Timestamp |
    |-------------------------|
    | 2020-06-29 04:32:51.183 |
    +-------------------------+
    (1 row affected)
    Commands completed successfully.
    +-------------------------+
    | Second Timestamp |
    |-------------------------|
    | 2020-06-29 04:33:30.160 |
    +-------------------------+
    (1 row affected)

    提供する時間の値に関して留意すべき点がいくつかあります。

    • 時刻は日時で指定できます データ形式、またはローカル変数として指定できます。
    • 日付は指定できないため、日時の日付部分 値は許可されていません。
    • 時刻はhh:mm [[:ss] .mss]の形式で、オプションで1900-01-01の日付を含めることができます。

    実際の遅延は変動する可能性があります

    実際の遅延時間は、サーバーの負荷などによって異なるため、指定した時間とは異なる場合があります。

    タイムカウンターは、WAITFORのときに開始されます ステートメントスレッドがスケジュールされています。サーバーがビジー状態の場合、スレッドがすぐにスケジュールされない可能性があるため、時間遅延が指定された時間より長くなる可能性があります。

    サーバーブローカーメッセージ

    WAITFOR ステートメントは、ServiceBrokerメッセージにのみ適用可能ないくつかの引数/値を受け入れます。

    Service Brokerメッセージを使用する場合、RECEIVEを提供できます ステートメントまたはGET CONVERSATION GROUP ステートメント、およびTIMEOUT メッセージがキューに到着するのを待機する期間をミリ秒単位で指定する引数。

    これらのオプションの詳細については、Microsoftの公式ドキュメントを参照してください。


    1. SQLServerでのテーブル変数のパフォーマンス

    2. このPL/SQLの何が問題になっていますか?バインド変数*は宣言されていません

    3. TSQLまたはGUIを使用してSQLServerでデータベースを作成する方法-SQLServer/TSQLチュートリアルパート24

    4. SQLで生年月日から年齢を計算する方法