Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Recupera uma linha específica de um cursor do servidor Transact-SQL.
Transact-SQL convenções de sintaxe
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
Retorna a linha de resultado imediatamente após a linha atual e incrementa a linha atual para a linha retornada. Se FETCH NEXT for a primeira busca contra um cursor, ela retornará a primeira linha no conjunto de resultados.
NEXT é a opção de busca de cursor padrão.
PRIOR
Retorna a linha de resultado imediatamente anterior à linha atual e diminui a linha atual para a linha retornada. Se FETCH PRIOR for a primeira busca contra um cursor, nenhuma linha será retornada e o cursor será posicionado à esquerda antes da primeira linha.
FIRST
Retorna a primeira linha do cursor e a torna a linha atual.
LAST
Retorna a última linha do cursor e a torna a linha atual.
ABSOLUTO { n| @nvar}
Se n ou @nvar for positivo, retorna a linha n linhas da frente do cursor e torna a linha retornada a nova linha atual. Se n ou @nvar for negativo, retorna a linha n linhas antes do final do cursor e torna a linha retornada a nova linha atual. Se n ou @nvar for 0, nenhuma linha será retornada.
n deve ser uma constante inteira e @nvar deve ser smallint, tinyint ou int.
RELATIVO { n| @nvar}
Se n ou @nvar for positivo, retorna a linha n linhas além da linha atual e torna a linha retornada a nova linha atual. Se n ou @nvar for negativo, retorna a linha n linhas anteriores à linha atual e torna a linha retornada a nova linha atual. Se n ou @nvar for 0, retorna a linha atual. Se FETCH RELATIVE for especificado com n ou @nvar definido como números negativos ou 0 na primeira busca feita contra um cursor, nenhuma linha será retornada.
n deve ser uma constante inteira e @nvar deve ser smallint, tinyint ou int.
GLOBAL
Especifica que cursor_name se refere a um cursor global.
cursor_name
É o nome do cursor aberto a partir do qual a busca deve ser feita. Se existirem um cursor global e um cursor local com cursor_name como nome, cursor_name para o cursor global se GLOBAL for especificado e para o cursor local se GLOBAL não for especificado.
@
cursor_variable_name
É o nome de uma variável de cursor que faz referência ao cursor aberto a partir do qual a busca deve ser feita.
EM @variable_name[ ,... n]
Permite que os dados das colunas de uma busca sejam colocados em variáveis locais. Cada variável na lista, da esquerda para a direita, está associada à coluna correspondente no conjunto de resultados do cursor. O tipo de dados de cada variável deve corresponder ou ser uma conversão implícita suportada do tipo de dados da coluna do conjunto de resultados correspondente. O número de variáveis deve corresponder ao número de colunas na lista de seleção do cursor.
Remarks
Se a SCROLL opção não for especificada em uma instrução de estilo DECLARE CURSOR ISO, NEXT é a única FETCH opção suportada. Se SCROLL for especificado em um estilo DECLARE CURSORISO, todas as FETCH opções são suportadas.
Quando as extensões de cursor Transact-SQL DECLARE são usadas, estas regras se aplicam:
Se um ou
FORWARD_ONLYFAST_FORWARDé especificado,NEXTé a únicaFETCHopção suportada.Se
DYNAMIC,FORWARD_ONLYouFAST_FORWARDnão forem especificados, e um dosKEYSET,STATICouSCROLLforem especificados, todas asFETCHopções serão suportadas.DYNAMIC SCROLLOs cursores suportam todas as opções,FETCHexcetoABSOLUTE.
A @@FETCH_STATUS função informa o status da última FETCH instrução. As mesmas informações são registradas na coluna fetch_status no cursor retornado por sp_describe_cursor. Essas informações de status devem ser usadas para determinar a validade dos dados retornados por uma FETCH instrução antes de tentar qualquer operação contra esses dados. Para obter mais informações, consulte @@FETCH_STATUS (Transact-SQL).
Permissions
Permissões padrão FETCH para qualquer usuário válido.
Examples
A. Usando o FETCH em um cursor simples
O exemplo a seguir declara um cursor simples para as linhas da Person.Person tabela com um sobrenome que começa com B, e usa FETCH NEXT para percorrer as linhas. As FETCH instruções retornam o valor para a coluna especificada em DECLARE CURSOR como um conjunto de resultados de linha única.
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. Usando o FETCH para armazenar valores em variáveis
O exemplo a seguir é semelhante ao exemplo A, exceto que a FETCH saída das instruções é armazenada em variáveis locais em vez de ser retornada diretamente ao cliente. A PRINT instrução combina as variáveis em uma única cadeia de caracteres e as retorna ao cliente.
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. Declarar um cursor SCROLL e usar as outras opções FETCH
O exemplo a seguir cria um SCROLL cursor para permitir recursos completos de rolagem pelas LASTopções , PRIOR, RELATIVEe 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
Ver também
FECHAR (Transact-SQL)
DESALOCAR (Transact-SQL)
DECLARAR CURSOR (Transact-SQL)
ABERTO (Transact-SQL)