Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Letiltja egy köteg, tárolt eljárás vagy tranzakció végrehajtását, amíg egy megadott idő vagy időintervallum el nem telik, vagy egy megadott utasítás módosít vagy visszaad legalább egy sort.
Transact-SQL szintaxis konvenciók
Syntax
WAITFOR
{
DELAY 'time_to_pass'
| TIME 'time_to_execute'
| [ ( receive_statement ) | ( get_conversation_group_statement ) ]
[ , TIMEOUT timeout ]
}
Arguments
KÉSÉS
A megadott időtartam, amely egy köteg, tárolt eljárás vagy tranzakció folytatása előtt legfeljebb 24 óráig tart.
'time_to_pass'
A várakozási idő.
time_to_passmegadható dátum/idő adatformátumban vagy helyi változóként. A dátumok nem adhatók meg, ezért a dátum/idő érték dátumrésze nem engedélyezett.
time_to_pass formátuma : hh:mm[[:ss].fff].
TIME
A köteg, a tárolt eljárás vagy a tranzakció futásának megadott időpontja.
'time_to_execute'
A WAITFOR utasítás befejezésének időpontja.
time_to_executemegadható datetime adatformátumban, vagy helyi változóként is megadható. A dátumok nem adhatók meg, ezért a dátum/idő érték dátumrésze nem engedélyezett.
time_to_execute formátuma hh:mm[[:ss].fff] a következő, és opcionálisan a dátumot is tartalmazhatja 1900-01-01.
receive_statement
Csak a szolgáltatásközvetítői üzenetekre vonatkozik. További információ: FOGADÁS.
Érvényes RECEIVE utasítás.
get_conversation_group_statement
Csak a szolgáltatásközvetítői üzenetekre vonatkozik. További információ: GET CONVERSATION GROUP.
Érvényes GET CONVERSATION GROUP utasítás.
IDŐKÉRÉS
Csak a szolgáltatásközvetítői üzenetekre vonatkozik. További információ: FOGADÁS ÉS BESZÉLGETÉSI CSOPORT LEKÉRÉSE.
Ezredmásodpercben megadja, hogy mennyi ideig várjon egy üzenet az üzenetsorra.
Remarks
WAITFOR Az utasítás végrehajtása közben a tranzakció fut, és más kérések nem futtathatók ugyanabban a tranzakcióban.
A tényleges idő késleltetése eltérhet a time_to_pass, time_to_execute vagy időtúllépésben megadott időtől, és a kiszolgáló tevékenységi szintjétől függ. Az időszámláló az utasításszál ütemezésekor WAITFOR kezdődik. Ha a kiszolgáló foglalt, előfordulhat, hogy a szál nem lesz azonnal ütemezve, így az idő késleltetése hosszabb lehet a megadott időnél.
WAITFOR nem módosítja a lekérdezés szemantikáját. Ha egy lekérdezés nem tud sorokat visszaadni, WAITFOR akkor a megadott esetben örökké vár, vagy amíg el nem TIMEOUT éri a lekérdezést.
A kurzorok nem nyithatóak meg utasításokon WAITFOR .
A nézetek nem határozhatók meg utasításokon WAITFOR .
Ha a lekérdezés túllépi a lekérdezés várakozási lehetőségét, az WAITFOR utasítás argumentum futtatása nélkül is befejeződhet. A konfigurációs beállításról további információt a Kiszolgáló konfigurációja: lekérdezési várakozás című témakörben talál. Az aktív és várakozási folyamatok megtekintéséhez használja a sp_who.
Minden WAITFOR utasításhoz tartozik egy szál. Ha sok WAITFOR utasítás van megadva ugyanazon a kiszolgálón, számos szál köthető össze, és várhatja, hogy ezek az utasítások fussanak. Az SQL Server figyeli az utasításszálak számát WAITFOR , és véletlenszerűen kiválaszt néhány szálat a kilépéshez, ha a kiszolgáló elkezdi tapasztalni a szál éhezést.
Holtpontot úgy hozhat létre, ha egy olyan lekérdezést futtat egy tranzakción WAITFOR belül, amely zárolásokat is tartalmaz, megakadályozva az utasítás által WAITFOR elért sorhalmaz módosításait. Az SQL Server azonosítja ezeket a forgatókönyveket, és üres eredményhalmazt ad vissza, ha fennáll az ilyen holtpont esélye.
Caution
Az WAITFOR SQL Server-folyamat befejeződésének lassítása időtúllépési üzenetet eredményezhet az alkalmazásban. Szükség esetén módosítsa a kapcsolat időtúllépési beállítását az alkalmazás szintjén.
Examples
A. A WAITFOR TIME használata
Az alábbi példa a tárolt eljárást sp_update_job 10:20-kor (10:20-kor)msdb hajtja végre az 22:20 adatbázisban.
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. A WAITFOR DELAY használata
Az alábbi példa két órás késés után hajtja végre a tárolt eljárást.
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
GO
C. A WAITFOR DELAY használata helyi változóval
Az alábbi példa bemutatja, hogyan használható egy helyi változó a WAITFOR DELAY beállítással. Ez a tárolt eljárás változó ideig várakozik, majd adatokat ad vissza a felhasználónak az eltelt órák, percek és másodpercek számaként.
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
Itt van az eredmények összessége.
A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.