Bagaimana cara menunggu selama 2 detik?

187

Bagaimana seseorang menyebabkan keterlambatan dalam eksekusi untuk jumlah detik tertentu?

Ini tidak melakukannya:

WAITFOR DELAY '00:02';

Apa format yang benar?

Chad
sumber
Utas tampaknya menunggu lebih lama dari 2 detik. Saya menyadari bahwa mungkin diperlukan waktu lebih dari 2 detik untuk melanjutkan, tetapi butuh sekitar 1 menit ketika berjalan pada db lokal yang sebenarnya saya gunakan dan tidak ada aktivitas lain yang berjalan.
Chad
1
Ini sebenarnya akan menunggu tepat 2 menit.
Nick Chammas
2
mungkin duplikat Perintah Tidur di T-SQL?
Jesse

Jawaban:

365

Dokumentasi untukWAITFOR() tidak secara eksplisit menjabarkan format string yang diperlukan.

Ini akan menunggu selama 2 detik:

WAITFOR DELAY '00:00:02';

Formatnya adalah hh:mi:ss.mmm.

Nick Chammas
sumber
99

Seperti disebutkan dalam jawaban lain, semua yang berikut ini akan berfungsi untuk sintaks berbasis string standar.

WAITFOR DELAY '02:00' --Two hours
WAITFOR DELAY '00:02' --Two minutes
WAITFOR DELAY '00:00:02' --Two seconds
WAITFOR DELAY '00:00:00.200' --Two tenths of a seconds

Ada juga metode alternatif untuk memberikan DATETIMEnilai. Anda mungkin berpikir saya membingungkan ini WAITFOR TIME, tetapi juga berfungsi untuk WAITFOR DELAY.

Pertimbangan untuk lulus DATETIME:

  • Itu harus dilewatkan sebagai variabel, jadi itu bukan satu-liner yang bagus lagi.
  • Penundaan diukur sebagai waktu sejak Zaman ( '1900-01-01').
  • Untuk situasi yang membutuhkan jumlah penundaan yang bervariasi, jauh lebih mudah untuk memanipulasi DATETIMEdaripada memformat a VARCHAR.

Cara menunggu 2 detik:

--Example 1
DECLARE @Delay1 DATETIME
SELECT @Delay1 = '1900-01-01 00:00:02.000'
WAITFOR DELAY @Delay1

--Example 2
DECLARE @Delay2 DATETIME
SELECT @Delay2 = dateadd(SECOND, 2, convert(DATETIME, 0))
WAITFOR DELAY @Delay2

Catatan tentang menunggu TIMEvs DELAY:

Pernahkah Anda memperhatikan bahwa jika Anda secara tidak sengaja melewati WAITFOR TIMEtanggal yang telah berlalu, bahkan hanya dalam sedetik, itu tidak akan pernah kembali? Saksikan berikut ini:

--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER

Sayangnya, WAITFOR DELAYakan melakukan hal yang sama jika Anda memberikan DATETIMEnilai negatif (ya, itu hal).

--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER

Namun, saya masih akan merekomendasikan menggunakan WAITFOR DELAYlebih dari waktu statis karena Anda selalu dapat mengkonfirmasi keterlambatan Anda positif dan akan tetap seperti itu selama berapa lama waktu yang dibutuhkan kode Anda untuk mencapai WAITFORpernyataan.

Dikelilingi oleh MyFish
sumber
25

Bagaimana dengan ini?

WAITFOR DELAY '00:00:02';

Jika Anda memiliki "00:02" itu menafsirkannya sebagai Jam: Menit.

JohnD
sumber
2

Coba contoh ini:

exec DBMS_LOCK.sleep(5);

Ini adalah keseluruhan skrip:

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;

exec DBMS_LOCK.sleep(5);

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;
john m
sumber