Dela via


FETCH (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Hämtar en specifik rad från en Transact-SQL servermarkör.

Transact-SQL syntaxkonventioner

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
Returnerar resultatraden omedelbart efter den aktuella raden och ökar den aktuella raden till den returnerade raden. Om FETCH NEXT är den första hämtningen mot en markör returneras den första raden i resultatuppsättningen. NEXT är standardalternativet för hämtning av markören.

PRIOR
Returnerar resultatraden omedelbart före den aktuella raden och minskar den aktuella raden till den returnerade raden. Om FETCH PRIOR är den första hämtningen mot en markör returneras ingen rad och markören lämnas placerad före den första raden.

FIRST
Returnerar den första raden i markören och gör den till den aktuella raden.

LAST
Returnerar den sista raden i markören och gör den till den aktuella raden.

ABSOLUT { n| @nvar}
Om n eller @nvar är positivt returnerar rad n rader från markörens framsida och gör den returnerade raden till den nya aktuella raden. Om n eller @nvar är negativt returnerar rad n raderna före markörens slut och gör den returnerade raden till den nya aktuella raden. Om n eller @nvar är 0 returneras inga rader. n måste vara en heltalskonstant och @nvar måste vara smallint, tinyint eller int.

RELATIV { n| @nvar}
Om n eller @nvar är positivt returnerar rad n raderna bortom den aktuella raden och gör den returnerade raden till den nya aktuella raden. Om n eller @nvar är negativt returnerar rad n raderna före den aktuella raden och gör den returnerade raden till den nya aktuella raden. Om n eller @nvar är 0 returnerar den aktuella raden. Om FETCH RELATIVE anges med n eller @nvar inställt på negativa tal eller 0 vid den första hämtningen mot en markör returneras inga rader. n måste vara en heltalskonstant och @nvar måste vara smallint, tinyint eller int.

GLOBAL
Anger att cursor_name refererar till en global markör.

cursor_name
Är namnet på den öppna markören som hämtningen ska göras från. Om både en global och en lokal markör finns med cursor_name som namn cursor_name till den globala markören om GLOBAL anges och till den lokala markören om GLOBAL inte har angetts.

@ cursor_variable_name
Är namnet på en markörvariabel som refererar till den öppna markören som hämtningen ska göras från.

INTO @variable_name[ ,... n]
Tillåter att data från kolumnerna i en hämtning placeras i lokala variabler. Varje variabel i listan, från vänster till höger, är associerad med motsvarande kolumn i markörens resultatuppsättning. Datatypen för varje variabel måste antingen matcha eller vara en implicit konvertering som stöds av datatypen för motsvarande resultatuppsättningskolumn. Antalet variabler måste matcha antalet kolumner i markörens urvalslista.

Remarks

Om alternativet SCROLL inte anges i en ISO-formatsats DECLARE CURSORNEXT är det enda FETCH alternativet som stöds. Om SCROLL anges i ISO-format DECLARE CURSORstöds alla FETCH alternativ.

När Transact-SQL DECLARE-markörtillägg används gäller följande regler:

  • Om antingen FORWARD_ONLY eller FAST_FORWARD anges NEXT är det enda FETCH alternativet som stöds.

  • Om DYNAMIC, FORWARD_ONLY eller FAST_FORWARD inte anges och något av KEYSET, STATICeller SCROLL anges, stöds alla FETCH alternativ.

  • DYNAMIC SCROLL markörer har stöd för FETCH alla alternativ förutom ABSOLUTE.

Funktionen @@FETCH_STATUS rapporterar status för den senaste FETCH instruktionen. Samma information registreras i kolumnen fetch_status i markören som returneras av sp_describe_cursor. Den här statusinformationen ska användas för att fastställa giltigheten för de data som returneras av en FETCH instruktion innan någon åtgärd utförs mot dessa data. Mer information finns i @@FETCH_STATUS (Transact-SQL).

Permissions

Behörigheter för FETCH standard för alla giltiga användare.

Examples

A. Använda FETCH i en enkel markör

I följande exempel deklareras en enkel markör för raderna Person.Person i tabellen med ett efternamn som börjar med Boch använder FETCH NEXT för att gå igenom raderna. Uttrycken FETCH returnerar värdet för kolumnen som anges i DECLARE CURSOR som en resultatuppsättning med en rad.

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. Använda FETCH för att lagra värden i variabler

Följande exempel liknar exempel A, förutom att utdata från -uttrycken FETCH lagras i lokala variabler i stället för att returneras direkt till klienten. - PRINT instruktionen kombinerar variablerna i en enda sträng och returnerar dem till klienten.

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. Deklarera en SCROLL-markör och använda de andra FETCH-alternativen

I följande exempel skapas en SCROLL markör för att tillåta fullständiga rullningsfunktioner via LASTalternativen , PRIOR, RELATIVEoch 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  

See Also

CLOSE (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLARERA MARKÖREN (Transact-SQL)
OPEN (Transact-SQL)