Aracılığıyla paylaş


WAITFOR (Transact-SQL)

Belirtilen bir saat veya saat aralığına ulaşıldığında veya belirtilen bir deyim değiştirir veya en az bir satır döndürür kadar toplu iş, saklı yordamveya hareket yürütülmesini engeller.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

WAITFOR 
{
    DELAY 'time_to_pass' 
  | TIME 'time_to_execute' 
  | [ ( receive_statement ) | ( get_conversation_group_statement ) ] 
    [ , TIMEOUT timeout ]
}

Bağımsız değişkenler

  • GECİKME
    Belirtilen, en fazla toplu işyürütme önce 24 saat maksimum saklı yordam, geçmesi gereken saat aralığıdır veya hareket eder.

  • 'time_to_pass'
    Bekleme saat dönemdir.time_to_passiçin kabul edilebilir biçimlerden birinde belirtilen datetime verileri, veya belirtilebilir olarak yerel bir değişken.Tarihleri tarif edilemez; Bu nedenle, tarih bölümü datetime değer verilmiyor.

  • SAAT
    toplu iş, saklı yordamveya işlem çalıştırıldığında belirtilen saat gelmiştir.

  • 'time_to_execute'
    WAITFOR deyim en sona erdikten saat gelmiştir.time_to_executeiçin kabul edilebilir biçimlerden birinde belirtilen datetime verileri, veya belirtilebilir olarak yerel bir değişken.Tarihleri tarif edilemez; Bu nedenle, tarih bölümü datetime değer verilmiyor.

  • receive_statement
    Geçerli Al deyimolur.

    Önemli notÖnemli

    WAITFOR ile bir receive_statement ise yalnızca uygulanabilir Service Broker iletileri.Daha fazla bilgi için, bkz. ALMA (Transact-SQL).

  • get_conversation_group_statement
    Geçerli bir görüşme grup alma deyimolur.

    Önemli notÖnemli

    WAITFOR ile bir get_conversation_group_statement ise yalnızca uygulanabilir Service Broker iletileri.Daha fazla bilgi için, bkz. get konuşma grubu (Transact-SQL).

  • ZAMAN AŞIMItimeout
    saat, üzerinde sıra geldiğinde bir ileti için beklenecek milisaniye cinsinden belirtir.

    Önemli notÖnemli

    WAITFOR zaman AŞIMI ile belirtme yalnızca uygulanabilir Service Broker iletileri.Daha fazla bilgi için, bkz. ALMA (Transact-SQL) ve get konuşma grubu (Transact-SQL).

Açıklamalar

WAITFOR deyimyürütülürken hareket çalışıyorsa ve başka istekler aynı hareket altında çalıştırabilirsiniz.

Belirtilen saat gecikme gerçek saat değişebilir time_to_pass, time_to_execute, veya timeout ve server etkinlik düzey bağlıdırWAITFOR deyim ile ilişkili iş parçacığı planlanmıştır saat sayacı başlar.Sunucu meşgulse, iş parçacığı hemen zamanlanmış olabilir değil; Bu nedenle, gecikme saat belirtilen saatdaha uzun olabilir.

WAITFOR sorgu semantik değiştirmez.Tüm satırları sorgu döndüremez, WAITFOR devamlı veya zaman AŞIMI ulaşılıncaya kadar belirtilmişse bekleyecektir.

WAITFOR deyimlerini imleçler açılamaz.

WAITFOR deyimlerini görünümleri tanımlanamaz.

Ne zaman sorgu aşan query wait WAITFOR deyim bağımsız seçenek, tamamlamak olmadan çalışmaktadır.yapılandırma seçeneği hakkında daha fazla bilgi için bkz: Sorgu bekleme seçeneği.Etkin ve bekleme işlemleri görmek için sp_who.

Her WAITFOR deyim , kendisiyle ilişkili bir iş parçacığı vardır.Aynı sunucuda birçok WAITFOR ifadeleri belirttiyseniz, fazla iş parçacığı bu deyimleri çalıştırmak bekleyen bağlı.SQL ServerWAITFOR deyimi ile ilişkili iş parçacığı sayısını izler ve sunucu iş parçacığı sorunlar yaşamaya başlarsa çıkmak için bu iş parçacığı bazıları rasgele seçer.

WAITFOR deyim erişmeye çalıştığınız satır kümesi için değişiklikleri önleme kilitleri de taşıyan bir hareketin içinde WAITFOR ile bir sorgu çalıştırarak bir çıkmaz oluşturabilirsiniz.SQL ServerBu senaryoları tanımlar ve bir boş sonuç kümesi gibi çıkmaz olasılığını varsa döndürür.

Örnekler

A.WAITFOR zaman kullanma

Aşağıdaki örnek saklı yordamyürütürsp_update_job saat 10: 20 (22:20).

USE msdb;
EXECUTE sp_add_job @job_name = 'TestJob';
BEGIN
    WAITFOR TIME '22:20';
    EXECUTE sp_update_job @job_name = 'TestJob',
        @new_name = 'UpdatedJob';
END;
GO

B.WAITFOR GECİKME kullanma

Aşağıdaki örnek, iki saatlik gecikmeyle saklı yordam yürütür.

BEGIN
    WAITFOR DELAY '02:00';
    EXECUTE sp_helpdb;
END;
GO

C.WAITFOR GECİKME ile yerel bir değişken kullanarak

Aşağıdaki örnek, yerel bir değişken ile nasıl kullanılabileceğini gösterir WAITFOR DELAY seçeneği.saklı yordam saat beklemesini oluşturulur ve sonra geçen saniye saat ve dakika sayısı olarak kullanıcıya bilgi verir.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('dbo.TimeDelay_hh_mm_ss','P') IS NOT NULL
    DROP PROCEDURE dbo.TimeDelay_hh_mm_ss;
GO
CREATE PROCEDURE dbo.TimeDelay_hh_mm_ss 
    (
    @DelayLength char(8)= '00:00:00'
    )
AS
DECLARE @ReturnInfo varchar(255)
IF ISDATE('2000-01-01 ' + @DelayLength + '.000') = 0
    BEGIN
        SELECT @ReturnInfo = 'Invalid time ' + @DelayLength 
        + ',hh:mm:ss, submitted.';
        -- This PRINT statement is for testing, not use in production.
        PRINT @ReturnInfo 
        RETURN(1)
    END
BEGIN
    WAITFOR DELAY @DelayLength
    SELECT @ReturnInfo = 'A total time of ' + @DelayLength + ', 
        hh:mm:ss, has elapsed! Your time is up.'
    -- This PRINT statement is for testing, not use in production.
    PRINT @ReturnInfo;
END;
GO
/* This statement executes the dbo.TimeDelay_hh_mm_ss procedure. */
EXEC TimeDelay_hh_mm_ss '00:00:10';
GO

Sonuç kümesi buradadır.

A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.