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.
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 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 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 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.
Ayrıca bkz.