Udostępnij za pośrednictwem


WAITFOR (Transact-SQL)

Określone i najbardziej ograniczone uprawnienia, które mogą zostać odwołany na kolekcja schematu XML są wymienione w poniższej tabela, wraz z bardziej ogólnych uprawnień, które je w nim przez domniemanie.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • Wymaga uprawnienie Kontrola do kolekcja schematu XML.
    Czas, jaki musi upłynąć (maksymalnie 24 godziny), zanim nastąpi wykonanie zadania wsadowego, procedury składowanej lub transakcji.

  • '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.Nie można określić data; dlatego część data z datetime wartość nie jest dozwolona.

  • CZAS
    Czas trwania wykonywania zadania wsadowego, procedury składowanej lub transakcji.

  • '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.Nie można określić data; dlatego część data z datetime wartość nie jest dozwolona.

  • receive_statement
    Zawiera informacje na temat zadanie kategorii.

    Important noteImportant Note:

    WAITFOR z receive_statement ma zastosowanie tylko do Service Broker wiadomości. Aby uzyskać więcej informacji zobaczRECEIVE (Transact-SQL).

  • get_conversation_group_statement
    Zawiera informacje o kategorii programu operator.

    Important noteImportant Note:

    WAITFOR z get_conversation_group_statement ma zastosowanie tylko do Service Broker wiadomości. Aby uzyskać więcej informacji zobaczGET KONWERSACJI GROUP (języka Transact-SQL).

  • TIMEOUT timeout
    Okres (w milisekundach) oczekiwania na dotarcie komunikatu do kolejki.

    Important noteImportant Note:

    Określanie WAITFOR z TIMEOUT ma zastosowanie tylko do Service Broker wiadomości. Aby uzyskać więcej informacji zobacz RECEIVE (Transact-SQL) i GET KONWERSACJI GROUP (języka Transact-SQL).

Remarks

Kategoria zadanie lokalnych.

Rzeczywiste opóźnienie może się różnić od określonego parametrem time_to_passtime_to_execute lub timeout, ponieważ jest zależne od poziomu aktywności serwera.Licznik czasu jest uruchamiany w momencie zaplanowania wątku skojarzonego z instrukcją WAITFOR.Jeśli serwer jest zajęty, wątek może nie zostać zaplanowany natychmiast, przez co opóźnienie może być większe niż określony czas.

Instrukcja WAITFOR nie powoduje zmiany semantyki zapytania.Jeśli zapytanie nie zwraca żadnych wierszy, instrukcja WAITFOR czeka aż do upływu limitu czasu wyrażonego argumentem TIMEOUT (jeśli jest określony).

Instrukcje WAITFOR nie mogą powodować otwierania kursorów.

W instrukcjach WAITFOR nie można definiować widoków.

When the query exceeds the querywait option, the WAITFOR statement argument can complete without running.Aby uzyskać więcej informacji na temat opcji konfiguracja zobacz query wait Option. Aby wyświetlić aktywne i procesów oczekiwania, należy użyć sp_who.

Typ kategorii: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.

Przykłady

A.Nazwa kategorii

W poniższym przykładzie wykonuje procedura przechowywana sp_update_job godzinie 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.Używanie polecenia WAITFOR DELAY

W przykładzie poniżej po dwugodzinnej zwłoce następuje wykonanie procedury składowanej.

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

C.Jeśli zostaną określone nie parametry, zestaw wyników zawiera informacje dotyczące wszystkich zadanie kategorii.

W przykładzie poniżej pokazano sposób użycia lokalnej zmiennej z opcją WAITFOR DELAY.Jest tworzona procedura składowana, która czeka przez wskazany zmienny okres, po czym zwraca użytkownikowi informację o liczbie godzin, minut i sekund, jaka upłynęła.

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.