Aracılığıyla paylaş


BEKLEYİN (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Belirli bir zaman veya zaman aralığı geçene veya belirtilen bir deyim en az bir satır değiştirene veya döndürene kadar bir toplu işlem, saklı yordam veya işlemin yürütülmesini engeller.

Transact-SQL söz dizimi kuralları

Syntax

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

Arguments

GECİKME

Bir toplu işlem, saklı yordam veya işlem yürütülmeden önce en fazla 24 saat geçmesi gereken belirtilen süre.

'time_to_pass'

Bekleme süresi. time_to_passtarih saat veri biçiminde veya yerel değişken olarak belirtilebilir. Tarihler belirtilemiyor, bu nedenle tarih saat değerinin tarih bölümüne izin verilmez. time_to_pass olarak hh:mm[[:ss].fff]biçimlendirilir.

TIME

Toplu işlem, saklı yordam veya işlem çalıştırıldığında belirtilen süre.

'time_to_execute'

WAITFOR deyiminin bitiş saati. time_to_executetarih saat veri biçiminde veya yerel değişken olarak belirtilebilir. Tarihler belirtilemiyor, bu nedenle tarih saat değerinin tarih bölümüne izin verilmez. time_to_execute olarak hh:mm[[:ss].fff] biçimlendirilir ve isteğe bağlı olarak tarihini 1900-01-01içerebilir.

receive_statement

Şunlar için geçerlidir: Yalnızca Hizmet Aracısı iletileri. Daha fazla bilgi için bkz. RECEIVE.

Geçerli RECEIVE bir deyim.

get_conversation_group_statement

Şunlar için geçerlidir: Yalnızca Hizmet Aracısı iletileri. Daha fazla bilgi için bkz. KONUŞMA GRUBUNU ALMA.

Geçerli GET CONVERSATION GROUP bir deyim.

MOLA VERME

Şunlar için geçerlidir: Yalnızca Hizmet Aracısı iletileri. Daha fazla bilgi için bkz. RECEIVE ve GET CONVERSATION GROUP.

İletinin kuyruğa gelmesini bekleme süresini milisaniye olarak belirtir.

Remarks

WAITFOR Deyimi yürütülürken işlem çalışır ve başka hiçbir istek aynı işlem altında çalıştırılabilir.

Gerçek zaman gecikmesi time_to_pass, time_to_execute veya zaman aşımında belirtilen süreden farklı olabilir ve sunucunun etkinlik düzeyine bağlıdır. Zaman sayacı, deyim iş parçacığı zamanlandığında WAITFOR başlar. Sunucu meşgulse, iş parçacığı hemen zamanlanmayabilir, bu nedenle gecikme süresi belirtilen süreden uzun olabilir.

WAITFOR sorgunun semantiğini değiştirmez. Sorgu herhangi bir satır döndüremezse, WAITFOR belirtildiyse sonsuza kadar veya ulaşılana kadar TIMEOUT bekler.

İmleçler deyimlerde açılamaz WAITFOR .

Görünümler deyimlerde WAITFOR tanımlanamaz.

Sorgu sorgu bekleme seçeneğini aştığında, WAITFOR deyimi bağımsız değişkeni çalıştırılmadan tamamlanabilir. Yapılandırma seçeneği hakkında daha fazla bilgi için bkz . Sunucu yapılandırması: sorgu bekleme. Etkin ve bekleme işlemlerini görmek için sp_who kullanın.

Her WAITFOR deyimin kendisiyle ilişkilendirilmiş bir iş parçacığı vardır. Aynı sunucuda çok sayıda WAITFOR deyim belirtilirse, bu deyimlerin çalışması için birçok iş parçacığı bağlanabilir. SQL Server, deyim iş parçacığı sayısını WAITFOR izler ve sunucu iş parçacığı açlığıyla karşılaşmaya başlarsa bu iş parçacıklarından bazılarını rastgele seçer.

Ayrıca kilitleri tutan ve deyimi tarafından erişilen satır kümesinde değişiklik yapılmasını engelleyen bir işlem içinde ile WAITFOR bir sorgu çalıştırarak WAITFOR kilitlenme oluşturabilirsiniz. SQL Server bu senaryoları tanımlar ve böyle bir kilitlenme olasılığı varsa boş bir sonuç kümesi döndürür.

Caution

Dahil olmak WAITFOR , SQL Server işleminin tamamlanmasını yavaşlatabilir ve uygulamada bir zaman aşımı iletisine neden olabilir. Gerekirse, bağlantının zaman aşımı ayarını uygulama düzeyinde ayarlayın.

Examples

A. WAITFOR TIME kullanma

Aşağıdaki örnek, veritabanında saklı yordamı sp_update_jobmsdb 22:20 (22:20) saat 22:20'de yürütür.

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. BEKLEYİCİ GECIKME KULLAN

Aşağıdaki örnek, saklı yordamı iki saatlik bir gecikmeden sonra yürütür.

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

C. Yerel değişkenle WAITFOR DELAY kullanma

Aşağıdaki örnekte bir yerel değişkenin seçeneğiyle nasıl kullanılabileceğini gösterilmektedir WAITFOR DELAY . Bu saklı yordam, değişken bir süre bekler ve sonra kullanıcıya geçen saat, dakika ve saniye sayısı olarak bilgileri döndürür.

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 aşağıdadır.

A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.