Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Извлекает определенную строку из серверного курсора Transact-SQL.
Соглашения о синтаксисе Transact-SQL
Syntax
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
Arguments
NEXT
Возвращает строку результата сразу же за текущей строкой и перемещает указатель текущей строки на возвращенную строку. Если инструкция FETCH NEXT выполняет первую выборку в отношении курсора, она возвращает первую строку в результирующем наборе.
NEXT является параметром по умолчанию выборки из курсора.
PRIOR
Возвращает строку результата, находящуюся непосредственно перед текущей строкой и перемещает указатель текущей строки на возвращенную строку. Если инструкция FETCH PRIOR выполняет первую выборку из курсора, не возвращается никакая строка и положение курсора остается перед первой строкой.
FIRST
Возвращает первую строку в курсоре и делает ее текущей.
LAST
Возвращает последнюю строку в курсоре, и делает ее текущей.
ABSOLUTE { n| @nvar}
Если n или @nvar является положительным, возвращает строку n строк из начала курсора и делает возвращенную строку новой текущей строкой. Если n или @nvar является отрицательным, возвращает строку n строк в конец курсора и делает возвращенную строку новой текущей строкой. Если n или @nvar равно 0, строки не возвращаются.
n должен быть целочисленной константой, а @nvar должен иметь тип данных smallint, tinyint или int.
РОДСТВЕННИК { n| @nvar}
Если n или @nvar является положительным, возвращает строку n строк за текущую строку и делает возвращенную строку новой текущей строкой. Если n или @nvar является отрицательным, возвращает строку n строк перед текущей строкой и делает возвращенную строку новой текущей строкой. Если n или @nvar равно 0, возвращает текущую строку. Если FETCH RELATIVE указана с n или @nvar, заданными с отрицательными числами или 0 в первой выборке, выполненной с курсором, строки не возвращаются.
n должен быть целочисленной константой, а @nvar должен иметь тип данных smallint, tinyint или int.
GLOBAL
Указывает, что аргумент cursor_name ссылается на глобальный курсор.
cursor_name
Имя открытого курсора, из которого должна быть произведена выборка. Когда имеется как глобальный, так и локальный курсор с именем cursor_name, то cursor_name ссылается на глобальный курсор, если задано GLOBAL, и на локальный, если GLOBAL не задано.
@
cursor_variable_name
Имя переменной курсора, ссылающейся на открытый курсор, из которого должна быть произведена выборка.
INTO @variable_name[ ,...n]
Позволяет поместить данные из столбцов выборки в локальные переменные. Каждая переменная из списка, слева направо, связывается с соответствующим столбцом в результирующем наборе курсора. Тип данных каждой переменной должен соответствовать типу данных соответствующего столбца результирующего набора, или должна обеспечиваться поддержка неявного преобразования в тип данных этого столбца. Количество переменных должно совпадать с количеством столбцов в списке выбора курсора.
Remarks
Если параметр SCROLL не указан в инструкции DECLARE CURSOR в стиле ISO, NEXT является единственным поддерживаемым параметром FETCH. Если SCROLL указан в стиле ISO DECLARE CURSOR, поддерживаются все параметры FETCH.
При использовании расширений курсора Transact-SQL DECLARE применяются следующие правила.
Если указан параметр
FORWARD_ONLYилиFAST_FORWARD,NEXTявляется единственным поддерживаемым параметромFETCH.Если
DYNAMIC,FORWARD_ONLYилиFAST_FORWARDне указаны и указан один из параметровKEYSET,STATICиSCROLL, поддерживаются все параметрыFETCH.Курсоры
DYNAMIC SCROLLподдерживают все параметрыFETCH, кромеABSOLUTE.
Функция @@FETCH_STATUS возвращает состояние последней инструкции FETCH. Те же данные записываются в столбец fetch_status в курсоре, возвращаемом процедурой sp_describe_cursor. Эти сведения о состоянии должны использоваться для определения действительности данных, возвращаемых инструкцией FETCH перед попыткой выполнения любой операции с этими данными. Дополнительные сведения см. в разделе документации @@FETCH_STATUS (Transact-SQL).
Permissions
Разрешения FETCH по умолчанию предоставляются всем допустимым пользователям.
Examples
A. Использование инструкции FETCH в простом курсоре
В следующем примере объявляется простой курсор для строк в таблице Person.Person с фамилией, начинающийся с B, и используется FETCH NEXT для пошагового выполнения строк. Инструкции FETCH возвращают значение для столбца, указанного в инструкции DECLARE CURSOR в качестве однострочного результирующего набора.
USE AdventureWorks2022;
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName;
OPEN contact_cursor;
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
B. Использование инструкции FETCH для сохранения значений в переменных
Следующий пример аналогичен примеру A, за исключением того, что выход инструкций FETCH сохраняется в локальных переменных, а не возвращается непосредственно клиенту. Инструкция PRINT объединяет переменные в одну строку и возвращает их клиенту.
USE AdventureWorks2022;
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName VARCHAR(50), @FirstName VARCHAR(50);
DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
C. Объявление курсора SCROLL и использование других параметров инструкции FETCH
В следующем примере создается курсор SCROLL, с помощью которого можно получить полные возможности прокрутки с помощью параметров LAST, PRIOR, RELATIVE и ABSOLUTE.
USE AdventureWorks2022;
GO
-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor;
-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor;
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor;
-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor;
-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor;
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
См. также
CLOSE (Transact-SQL)
DEALLOCATE (Transact-SQL)
ОБЪЯВЛЕНИЕ КУРСОРА (Transact-SQL)
ОТКРЫТЬ (Transact-SQL)