OPEN (Transact-SQL)

Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

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

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

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

Примечания

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

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

Примечание

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

Примеры

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

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

См. также

CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
FETCH (Transact-SQL)