Udostępnij za pomocą


OTWÓRZ (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza 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)