Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Otwiera kursor serwera Transact-SQL i wypełnia kursor, wykonując instrukcję Transact-SQL określoną w instrukcji DECLARE CURSOR lub SET cursor_variable .
Transact-SQL konwencje składni
Syntax
OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }
Arguments
GLOBAL
Określa, że cursor_name odnosi się do kursora globalnego.
cursor_name
To nazwa zadeklarowanego kursora. Jeśli zarówno globalny, jak i lokalny kursor istnieje z cursor_name jako ich nazwą, cursor_name odnosi się do kursora globalnego, jeśli określono globalny; w przeciwnym razie cursor_name odnosi się do kursora lokalnego.
cursor_variable_name
To nazwa zmiennej kursora, która odwołuje się do kursora.
Remarks
Jeśli kursor jest zadeklarowany za pomocą opcji INSENSITIVE lub STATIC, funkcja OPEN tworzy tymczasową tabelę do przechowywania zestawu wyników. Otwieranie kończy się niepowodzeniem, gdy rozmiar dowolnego wiersza w zestawie wyników przekracza maksymalny rozmiar wiersza dla tabel programu SQL Server. Jeśli kursor jest zadeklarowany za pomocą opcji KEYSET, funkcja OPEN tworzy tymczasową tabelę do przechowywania zestawu kluczy. Tabele tymczasowe są przechowywane w bazie danych tempdb.
Po otwarciu kursora użyj funkcji @@CURSOR_ROWS, aby otrzymać liczbę kwalifikowanych wierszy w ostatnim otwartym kursorze.
Note
Program SQL Server nie obsługuje asynchronicznego generowania kursorów opartych na zestawie kluczy ani statycznych Transact-SQL. Transact-SQL operacje kursora, takie jak OPEN lub FETCH, są wsadowe, więc nie ma potrzeby asynchronicznego generowania kursorów Transact-SQL. Program SQL Server nadal obsługuje asynchroniczne kursory serwera oparte na asynchronicznych zestawach kluczy lub statycznych kursorów interfejsu programowania aplikacji (API), w przypadku których występuje problem z małym opóźnieniem OPEN ze względu na rundy klienta dla każdej operacji kursora.
Examples
Poniższy przykład otwiera kursor i pobiera wszystkie wiersze.
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2022.HumanResources.vEmployee
WHERE LastName like 'B%';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
Zobacz też
ZAMKNIJ (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLARUJ KURSOR (Transact-SQL)
PRZYNIEŚ (Transact-SQL)