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.
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 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 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 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.