OPEN (Transact-SQL)

Открывает серверный курсор языка Transact-SQL и заполняет его с помощью инструкции языка Transact-SQL, определенной в инструкции DECLARE CURSOR или SET cursor_variable.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

Аргументы

  • GLOBAL
    Указывает, что аргумент cursor_name ссылается на глобальный курсор.

  • cursor_name
    Имя объявленного курсора. Если существует как глобальный, так и локальный курсор с именем cursor_name, то при указании аргумента GLOBAL аргумент cursor_name ссылается на глобальный курсор, иначе аргумент cursor_name ссылается на локальный курсор.

  • cursor_variable_name
    Имя переменной курсора, которая ссылается на курсор.

Замечания

Если курсор объявлен с параметром INSENSITIVE или STATIC, инструкция OPEN создает временную таблицу для хранения результирующего набора. Инструкция OPEN завершается ошибкой в случае, если размер любой строки в результирующем наборе превышает максимальный разрешенный размер строки для таблиц SQL Server. Если курсор объявлен с параметром KEYSET, инструкция OPEN создает временную таблицу для хранения набора ключей. Временные таблицы хранятся в базе данных tempdb.

После того, как курсор открыт, используйте функцию @@CURSOR_ROWS для получения количества выбранных строк в последнем открытом курсоре.

ПримечаниеПримечание

SQL Server не поддерживает асинхронное формирование курсоров, управляемых набором ключей, и статических курсоров Transact-SQL. Операции курсора Transact-SQL, такие как OPEN или FETCH, обычно являются пакетными. Таким образом, нет необходимости в асинхронном формировании курсоров Transact-SQL. SQL Server продолжает поддерживать использование асинхронных курсоров, управляемых набором ключей, или статических серверных курсоров API в случаях, когда операция OPEN с малым периодом ожидания замедляется из-за двусторонних задержек клиента для каждой операции курсора.

Примеры

В следующем примере открывается курсор и выбираются все его строки:

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;