Aracılığıyla paylaş


BEKLE (Transact-SQL)

Bir belirtilen saat veya saat sınırına veya belirtilen bir deyim değiştirir ya da en az bir satır döndürür kadar toplu iş iş, saklı yordam veya işlemin yürütülmesini engeller.

Topic link iconTransact-SQL sözdizimi kuralları

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 dönemi, kadar geçmesi gereken süreyi en fazla 24 saat, bir toplu iş yürütmesini önce saklı yordamını veya işlem devam eder belirtir.

  • 'time_to_pass'
    Is the period of time to wait.time_to_pass can be specified in one of the acceptable formats for datetime data, or it can be specified as a local variable.Tarih belirtilemez; bu nedenle, tarih bölümüdatetimedeğere izin verilmez.

  • SAAT
    toplu iş iş iş, saklı yordam veya işlem saat çalışan belirtilen zamanı gelmiştir.

  • 'time_to_execute'
    Is the time at which the WAITFOR statement finishes.time_to_execute can be specified in one of the acceptable formats for datetime data, or it can be specified as a local variable.Tarih belirtilemez; bu nedenle, tarih bölümüdatetimedeğere izin verilmez.

  • receive_statement
    İş geçerli bir Al deyim.

    Important noteImportant Note:

    Bekle ile birreceive_statementyalnızca geçerliService Brokeriletileri.Daha fazla bilgi için bkz: (Transact-SQL) RECEIVE.

  • get_conversation_group_statement
    Geçerli bir GET konuşma GROUP deyim belirtilir.

    Important noteImportant Note:

    Bekle ile birget_conversation_group_statementyalnızca geçerliService Brokeriletileri.Daha fazla bilgi için bkz: GET KONUşMA GROUP (Transact-SQL).

  • timeout TIMEOUT
    saat, bir ileti geldiğinde sıra. bekle için milisaniye olarak belirtir

    Important noteImportant Note:

    TIMEOUT ile belirterek bekle yalnızca geçerliService Brokeriletileri.Daha fazla bilgi için bkz: (Transact-SQL) RECEIVE ve GET KONUşMA GROUP (Transact-SQL).

Remarks

WAITFOR deyim yürütülürken işlem çalıştıran ve aynı işlem altında çalışan başka bir isteği yok.

Fiili saat belirtilen saatten gecikme değişebilirtime_to_pass,time_to_execute, ortimeoutve etkinlik düzeyini bağlıdır.WAITFOR deyim ile ilişkili iş parçacığı parçacığının zamanlanan saat sayacını başlar.Sunucu meşgulse, iş parçacığı değil hemen zamanlanması; bu nedenle, gecikme süresini belirtilen süreden daha uzun olabilir.

BEKLE bir sorgunun semantik değiştirmez.Tüm satırları sorgu verilemez, bekle sürekli veya TIMEOUT ulaşılıncaya kadar belirtildiği takdirde bekler.

İmleç bekle deyimlerini açılamıyor.

Görünümler bekle deyimlerini tanımlanamaz.

When the query exceeds the querywait option, the WAITFOR statement argument can complete without running.Yapılandırma seçeneği hakkında daha fazla bilgi için bkz:Sorgu bekleme seçeneği.Bkz: active ve bekleyen işlemler, kullanmak içinsp_who.

Her bekle deyim ile ilişkilendirilmiş bir iş parçacığı vardır.If many WAITFOR statements are specified on the same server, many threads can be tied up waiting for these statements to run.SQL Server monitors the number of threads associated with WAITFOR statements, and randomly selects some of these threads to exit if the server starts to experience thread starvation.

You can create a deadlock by running a query with WAITFOR within a transaction that also holds locks preventing changes to the rowset that the WAITFOR statement is trying to access.SQL Server identifies these scenarios and returns an empty result set if the chance of such a deadlock exists.

Örnekler

C.WAITFOR saat kullanma

Aşağıdaki örnekte saklı yordam yürütür.sp_update_jobsaat 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 DELAY kullanma

Aşağıdaki örnekte iki saatlik gecikmeden sonra saklı yordamı çalıştırır.

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

c.WAITFOR DELAY ile yerel bir değişken kullanarak

Aşağıdaki örnek, yerel bir değişken ile nasıl kullanılabileceğini gösterirWAITFOR DELAYseçenek.Bir saklı yordam değişken bir süre boyunca beklemesini oluşturulur ve saat, dakika ve geçen saniye sayısı olarak kullanıcıya bilgi verir.

USE AdventureWorks;
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

Here is the result set.

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