Otwórz (Transact-SQL)

Otwiera Transact-SQL serwera kursor i wypełnia kursor przez wykonywanie Transact-SQL instrukcja DECLARE CURSOR lub określony zestaw cursor_variable instrukcja.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

Argumenty

  • GLOBALNE
    Określa, że cursor_name odnosi się do globalnego kursor.

  • cursor_name
    Jest nazwą zadeklarowanej kursor.Jeśli istnieje globalnym i lokalnym kursor z cursor_name jako swojej nazwy cursor_name odnosi się do globalnego kursor , jeżeli określono globalne; w przeciwnym razie cursor_name odnosi się do lokalnego kursor.

  • cursor_variable_name
    Jest nazwą zmiennej kursor , która odwołuje się kursor.

Uwagi

kursor jest zadeklarowana ze INSENSITIVE lub opcja STATYCZNEJ, otwórz tworzy tymczasowej tabela do przechowywania zestaw wyników.Otwórz nie powiedzie się, gdy rozmiar każdego wiersza w zestaw wyników przekracza maksymalny rozmiar wiersza dla SQL Server tabele.Jeśli kursor jest zadeklarowana z opcją zestawu KLUCZY, otwórz tworzy tymczasowej tabela do przechowywania zestawu kluczy.Tabele tymczasowe są przechowywane w tempdb.

Po otwarciu kursor wykorzystania @@ CURSOR_ROWS funkcja do otrzymywania liczby kwalifikujących się wierszy w ostatniej otwartej kursor.

Ostrzeżenie

SQL Servernie obsługuje generowania statyczne lub zależne od zestawu kluczy Transact-SQL kursory asynchronicznie.Transact-SQL operacjekursor , takich jak otwieranie lub pobieranie, batched, dzięki czemu nie ma potrzeby dla asynchronicznego generacji Transact-SQL kursory.SQL Serverw dalszym ciągu obsługuje kursory serwera asynchronicznego statyczne lub zależne od zestawu kluczy interfejs programowania aplikacji (API) gdzie małego opóźnienie otwarty jest istotny, ze względu na klient liczbę przekazywanych informacji dla każdej operacji kursor .

Przykłady

Poniższy przykład otwiera kursor i pobiera wszystkie wiersze.

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2008R2.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;