Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
Blocca l'esecuzione di un batch, una stored procedure o una transazione fino all'ora specificata o fino a quando non è trascorso l'intervallo di tempo specificato oppure finché un'istruzione specificata non modifica o restituisce almeno una riga.
Convenzioni relative alla sintassi Transact-SQL
Syntax
WAITFOR
{
DELAY 'time_to_pass'
| TIME 'time_to_execute'
| [ ( receive_statement ) | ( get_conversation_group_statement ) ]
[ , TIMEOUT timeout ]
}
Arguments
DELAY
Periodo di tempo specificato che deve trascorrere, fino a un massimo di 24 ore, prima dell'esecuzione di un batch, di una stored procedure o di una transazione.
'time_to_pass'
Periodo di attesa.
time_to_pass può essere specificato in un formato di dati datetime o come variabile locale. Non è possibile specificare date, quindi la parte data del valore datetime non è consentita.
time_to_pass è formattato come hh:mm[[:ss].fff].
TIME
Ora specificata in cui viene eseguito il batch, la stored procedure o la transazione.
'time_to_execute'
Ora di completamento dell'istruzione WAITFOR.
time_to_execute può essere specificato in un formato di dati datetime oppure può essere specificato come variabile locale. Non è possibile specificare date, quindi la parte data del valore datetime non è consentita.
time_to_execute è formattato come hh:mm[[:ss].fff] e può includere facoltativamente la data di 1900-01-01.
receive_statement
Si applica a: solo messaggi di Service Broker. Per altre informazioni, vedere RECEIVE.
Istruzione valida RECEIVE .
get_conversation_group_statement
Si applica a: solo messaggi di Service Broker. Per altre informazioni, vedere GET CONVERSATION GROUP.
Istruzione valida GET CONVERSATION GROUP .
TIMEOUT TIMEOUT
Si applica a: solo messaggi di Service Broker. Per altre informazioni, vedere RECEIVE e GET CONVERSATION GROUP.
Specifica il periodo di tempo, espresso in millisecondi, di attesa dell'arrivo di un messaggio nella coda.
Remarks
Durante l'esecuzione dell'istruzione WAITFOR , la transazione è in esecuzione e nessun'altra richiesta può essere eseguita nella stessa transazione.
Il ritardo di tempo effettivo può variare dal tempo specificato in time_to_pass, time_to_execute o timeout e dipende dal livello di attività del server. Il contatore dell'ora inizia quando viene pianificato il thread dell'istruzione WAITFOR . Se il server è occupato, il thread potrebbe non essere pianificato immediatamente, quindi il ritardo di tempo potrebbe essere superiore al tempo specificato.
WAITFOR non modifica la semantica di una query. Se una query non può restituire righe, WAITFOR attende per sempre o finché TIMEOUT non viene raggiunto, se specificato.
I cursori non possono essere aperti nelle WAITFOR istruzioni.
Le viste non possono essere definite nelle WAITFOR istruzioni.
Quando la query supera l'opzione di attesa della query, l'argomento dell'istruzione WAITFOR può essere completato senza eseguire . Per altre informazioni sull'opzione di configurazione, vedere Configurazione del server: attesa query. Per visualizzare i processi attivi e in attesa, usare sp_who.
A ogni WAITFOR istruzione è associato un thread. Se nello stesso server vengono specificate molte WAITFOR istruzioni, è possibile collegare molti thread in attesa dell'esecuzione di queste istruzioni. SQL Server monitora il numero di thread di WAITFOR istruzioni e seleziona in modo casuale alcuni di questi thread da uscire se il server inizia a verificarsi la fame di thread.
È possibile creare un deadlock eseguendo una query con WAITFOR all'interno di una transazione che contiene anche blocchi che impediscono le modifiche al set di righe a cui l'istruzione WAITFOR accede. SQL Server identifica questi scenari e restituisce un set di risultati vuoto se esiste la probabilità che si verifichi tale deadlock.
Caution
L'inclusione WAITFOR rallenta il completamento del processo di SQL Server e può comportare un messaggio di timeout nell'applicazione. Se necessario, regolare l'impostazione di timeout per la connessione a livello di applicazione.
Examples
A. Usare WAITFOR TIME
Nell'esempio seguente viene eseguita la stored procedure sp_update_job nel msdb database alle 10:20 (22:20).
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. Usare WAITFOR DELAY
Nell'esempio seguente la stored procedure viene eseguita dopo un ritardo di due ore.
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
GO
C. Usare WAITFOR DELAY con una variabile locale
Nell'esempio seguente viene illustrato l'utilizzo di una variabile locale con l'opzione WAITFOR DELAY. Questa stored procedure rimane in attesa per un periodo di tempo variabile e quindi restituisce all'utente informazioni sul numero di ore, minuti e secondi trascorsi.
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
Il set di risultati è il seguente.
A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.