Aracılığıyla paylaş


WAITFOR (Transact-sql)

Bir toplu iş, saklı yordam veya işlem yürütme, belirtilen bir saatteki veya zaman aralığına ulaşıldığında veya belirtilen bir deyimi değiştirir veya en az bir satır döndürür kadar engeller.

Konu bağlantısı simgesi Transact-SQL Sözdizim 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
    Kadar geçmesi gereken belirli bir süre önce bir toplu iş yürütme 24 Saat maksimum saklı yordam veya işlem gelirleri'dır.

  • 'time_to_pass'
    Bekleme süresini dönemdir. time_to_passiçin kabul edilebilir biçimlerinde belirtilebilir datetimeveri veya yerel değişken olarak belirtilebilir. Belirtilen tarihleri; Bu nedenle, Tarih Bölümü datetimedeğer verilmiyor.

  • SAAT
    Toplu iş, saklı yordam veya işlem çalışınca belirtilen zamanıdır.

  • 'time_to_execute'
    WAITFOR deyimi hangi bitirir zamanıdır. time_to_executeiçin kabul edilebilir biçimlerinde belirtilebilir datetimeveri veya yerel değişken olarak belirtilebilir. Belirtilen tarihleri; Bu nedenle, Tarih Bölümü datetimedeğer verilmiyor.

  • receive_statement
    Geçerli Al deyimi olur.

    Önemli notÖnemli

    WAITFOR ile bir receive_statementsadece uygulanabilir Service Brokermesaj. Daha fazla bilgi için, bkz. (Transact-sql) alma.

  • get_conversation_group_statement
    Geçerli bir get konuşma group deyimi iş.

    Önemli notÖnemli

    WAITFOR ile bir get_conversation_group_statementsadece uygulanabilir Service Brokermesaj. Daha fazla bilgi için, bkz. get konuşma group (Transact-sql).

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

    Önemli notÖnemli

    WAITFOR zaman aşımı belirtme yalnızca Service Brokermesaj. Daha fazla bilgi için (Transact-sql) almave get konuşma group (Transact-sql).

Açıklamalar

WAITFOR deyimi yürütülürken hareket çalışıyorsa ve başka bir isteği yok aynı hareket altında çalıştırabilirsiniz.

Gerçek zaman gecikmek belirtilen zaman değişebilir time_to_pass, time_to_execute, ya timeoutve sunucunun etkinlik düzeyine bağlıdır. WAITFOR deyimi ile ilişkili iş parçacığı planlanmıştır zaman sayacı başlar. Sunucu meşgulse, konu hemen planlanmış olabilir değil; Bu nedenle, gecikme süresi belirtilen süreden daha uzun olabilir.

WAITFOR sorgu semantiği değiştirmez. Bir sorgu herhangi bir satır döndüremez, WAITFOR sonsuza kadar veya zaman aşımı değerine ulaşılana kadar belirtilmişse bekleyecek.

İmleçler WAITFOR deyimlerini açılamaz.

WAITFOR deyimleri üzerinde görünümleri tanımlanamaz.

Ne zaman sorgu aşan query waitseçeneği WAITFOR deyimi bağımsız daha tamamlayarak olmadan çalışıyor. Yapılandırma seçeneği hakkında daha fazla bilgi için bkz: Sorgu bekleme sunucusu yapılandırma seçeneği yapılandırmak. Etkin ve bekleyen işlemleri görmek için sp_who.

Her WAITFOR deyimi, kendisiyle ilişkili bir iş parçacığı vardır. Çok WAITFOR tablolar aynı sunucuda belirtilmemişse, çok sayıda iş parçacığı bu deyimleri çalıştırmak bekleyen bağlı olabilir. SQL ServerWAITFOR deyimleri ile ilişkili iş parçacığı sayısını izler ve sunucu iş parçacığı açlık yaşamaya başlarsa çıkmak için bu konuları bazıları rasgele seçer.

WAITFOR deyimi erişmeye çalıştığı satır kümesi değişiklikleri önleme kilitleri de tutan bir hareketin içinde WAITFOR ile bir sorguyu çalıştırarak bir kilitlenme oluşturabilirsiniz. SQL ServerBu senaryoları tanımlar ve böyle bir kilitlenme olasılığını varsa ayarlamak boş bir sonuç döndürür.

Örnekler

A.WAITFOR zaman kullanma

Aşağıdaki örnek saklı yordam yürütür sp_update_job10: 20 PM (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

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 örnek, iki saatlik bir gecikmeyle için saklı yordamı yürütür.

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

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

C.WAITFOR gecikme ile değişken kullanma

Aşağıdaki örnek, yerel bir değişken ile nasıl kullanılabileceğini gösterir WAITFOR DELAYseçeneği. Saklı yordam değişken bir süre beklemeniz oluşturulur ve sonra için Saat, dakika ve saniyeyi geçen sayısı gibi kullanıcıya bilgi verir.

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

USE AdventureWorks2012;
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.

Ayrıca bkz.

Başvuru

Akış denetimi dil (Transact-sql)

DateTime (Transact-sql)

sp_who (Transact-sql)