Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Memblokir eksekusi batch, prosedur tersimpan, atau transaksi hingga interval waktu atau waktu tertentu berlalu, atau pernyataan tertentu memodifikasi atau mengembalikan setidaknya satu baris.
Syntax
WAITFOR
{
DELAY 'time_to_pass'
| TIME 'time_to_execute'
| [ ( receive_statement ) | ( get_conversation_group_statement ) ]
[ , TIMEOUT timeout ]
}
Arguments
DELAY
Periode waktu yang ditentukan yang harus diteruskan, hingga maksimum 24 jam, sebelum eksekusi batch, prosedur tersimpan, atau transaksi berlangsung.
'time_to_pass'
Periode waktu untuk menunggu.
time_to_pass dapat ditentukan baik dalam format data tanggalwaktu , atau sebagai variabel lokal. Tanggal tidak dapat ditentukan, sehingga bagian tanggal dari nilai tanggalwaktu tidak diizinkan.
time_to_pass diformat sebagai hh:mm[[:ss].fff].
TIME
Waktu yang ditentukan ketika batch, prosedur tersimpan, atau transaksi berjalan.
'time_to_execute'
Waktu di mana pernyataan WAITFOR selesai.
time_to_execute dapat ditentukan dalam format data tanggalwaktu , atau dapat ditentukan sebagai variabel lokal. Tanggal tidak dapat ditentukan, sehingga bagian tanggal dari nilai tanggalwaktu tidak diizinkan.
time_to_execute diformat sebagai hh:mm[[:ss].fff] dan dapat secara opsional menyertakan tanggal 1900-01-01.
receive_statement
Berlaku untuk: Pesan Service Broker saja. Untuk informasi selengkapnya, lihat RECEIVE.
Pernyataan yang valid RECEIVE .
get_conversation_group_statement
Berlaku untuk: Pesan Service Broker saja. Untuk informasi selengkapnya, lihat GET CONVERSATION GROUP.
Pernyataan yang valid GET CONVERSATION GROUP .
Batas waktu BATAS waktu
Berlaku untuk: Pesan Service Broker saja. Untuk informasi selengkapnya, lihat MENERIMA dan MENDAPATKAN GRUP PERCAKAPAN.
Menentukan periode waktu, dalam milidetik, untuk menunggu pesan tiba pada antrean.
Remarks
WAITFOR Saat pernyataan dijalankan, transaksi berjalan dan tidak ada permintaan lain yang dapat berjalan di bawah transaksi yang sama.
Penundaan waktu aktual mungkin bervariasi dari waktu yang ditentukan dalam time_to_pass, time_to_execute, atau batas waktu, dan tergantung pada tingkat aktivitas server. Penghitung waktu dimulai ketika utas pernyataan dijadwalkan WAITFOR . Jika server sibuk, utas mungkin tidak segera dijadwalkan, sehingga penundaan waktu mungkin lebih lama dari waktu yang ditentukan.
WAITFOR tidak mengubah semantik kueri. Jika kueri tidak dapat mengembalikan baris apa pun, WAITFOR tunggu selamanya atau hingga TIMEOUT tercapai, jika ditentukan.
Kursor tidak dapat dibuka pada WAITFOR pernyataan.
Tampilan tidak dapat ditentukan pada WAITFOR pernyataan.
Saat kueri melebihi opsi tunggu kueri, WAITFOR argumen pernyataan bisa selesai tanpa berjalan. Untuk informasi selengkapnya tentang opsi konfigurasi, lihat Konfigurasi server: kueri tunggu. Untuk melihat proses aktif dan menunggu, gunakan sp_who.
Setiap WAITFOR pernyataan memiliki utas yang terkait dengannya. Jika banyak WAITFOR pernyataan ditentukan pada server yang sama, banyak utas dapat diikat menunggu pernyataan ini berjalan. SQL Server memantau jumlah WAITFOR utas pernyataan, dan secara acak memilih beberapa utas ini untuk keluar jika server mulai mengalami kelaparan utas.
Anda dapat membuat kebuntuan dengan menjalankan kueri dengan WAITFOR dalam transaksi yang juga menyimpan kunci yang mencegah perubahan pada set baris yang diakses oleh WAITFOR pernyataan. SQL Server mengidentifikasi skenario ini dan mengembalikan hasil kosong yang ditetapkan jika kemungkinan kebuntuan tersebut ada.
Caution
Termasuk WAITFOR memperlambat penyelesaian proses SQL Server dan dapat mengakibatkan pesan batas waktu dalam aplikasi. Jika perlu, sesuaikan pengaturan batas waktu untuk koneksi di tingkat aplikasi.
Examples
A. Gunakan WAITFOR TIME
Contoh berikut menjalankan prosedur sp_update_job tersimpan dalam database pada msdb pukul 22.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. Gunakan WAITFOR DELAY
Contoh berikut menjalankan prosedur tersimpan setelah penundaan dua jam.
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
GO
C. Menggunakan WAITFOR DELAY dengan variabel lokal
Contoh berikut menunjukkan bagaimana variabel lokal dapat digunakan dengan WAITFOR DELAY opsi . Prosedur tersimpan ini menunggu periode waktu variabel lalu mengembalikan informasi kepada pengguna sebagai jumlah jam, menit, dan detik yang berlalu.
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
Berikut set hasilnya.
A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.