Partilhar via


BUSCAR (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase 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 única FETCH opção suportada.

  • Se DYNAMIC, FORWARD_ONLY ou FAST_FORWARD não forem especificados, e um dos KEYSET, STATICou SCROLL forem especificados, todas as FETCH opções serão suportadas.

  • DYNAMIC SCROLL Os cursores suportam todas as opções, FETCH exceto ABSOLUTE.

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)