Sdílet prostřednictvím


APORTUJ (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Načte konkrétní řádek z kurzoru serveru Transact-SQL.

Transact-SQL konvence syntaxe

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
Vrátí řádek výsledků bezprostředně za aktuálním řádkem a zvýší aktuální řádek na vrácený řádek. Pokud FETCH NEXT je prvním načtením kurzoru, vrátí první řádek v sadě výsledků. NEXT je výchozí možnost načítání kurzoru.

PRIOR
Vrátí řádek výsledků bezprostředně před aktuálním řádkem a dekrementuje aktuální řádek na vrácený řádek. Pokud FETCH PRIOR se jedná o první načtení kurzoru, nevrátí se žádný řádek a kurzor se umístí doleva před prvním řádkem.

FIRST
Vrátí první řádek kurzoru a nastaví ho jako aktuální řádek.

LAST
Vrátí poslední řádek kurzoru a nastaví ho jako aktuální řádek.

ABSOLUTNÍ { n| @nvar}
Pokud je argument n nebo @nvar kladný, vrátí řádek n řádků z přední části kurzoru a vrátí vrácený řádek jako nový aktuální řádek. Pokud je argument n nebo @nvar záporný, vrátí řádek n řádků před koncem kurzoru a vrátí vrácený řádek jako nový aktuální řádek. Pokud n nebo @nvar je 0, nevrátí se žádné řádky. n musí být celočíselná konstanta a @nvar musí být smallint, tinyint nebo int.

RELATIVE { n| @nvar}
Pokud je argument n nebo @nvar kladný, vrátí řádek n řádků za aktuálním řádkem a vrátí vrácený řádek jako nový aktuální řádek. Pokud je argument n nebo @nvar záporný, vrátí řádek n řádků před aktuálním řádkem a vrátí vrácený řádek jako nový aktuální řádek. Pokud n nebo @nvar je 0, vrátí aktuální řádek. Pokud FETCH RELATIVE je zadána hodnota n nebo @nvar nastavena na záporná čísla nebo 0 při prvním načtení provedené proti kurzoru, nebudou vráceny žádné řádky. n musí být celočíselná konstanta a @nvar musí být smallint, tinyint nebo int.

GLOBAL
Určuje, že cursor_name odkazuje na globální kurzor.

cursor_name
Je název otevřeného kurzoru, ze kterého se má načíst. Pokud jako název existuje globální i místní kurzor s cursor_name , cursor_name na globální kurzor, pokud je zadána funkce GLOBAL, a na místní kurzor, pokud není zadána funkce GLOBAL.

@ cursor_variable_name
Je název proměnné kurzoru odkazující na otevřený kurzor, ze kterého se má načíst.

INTO @variable_name[ ,... n]
Umožňuje umístit data ze sloupců načtení do místních proměnných. Každá proměnná v seznamu zleva doprava je přidružená k odpovídajícímu sloupci v sadě výsledků kurzoru. Datový typ každé proměnné se musí shodovat nebo musí být podporovaným implicitní převodem datového typu odpovídajícího sloupce sady výsledků. Počet proměnných se musí shodovat s počtem sloupců v seznamu výběru kurzoru.

Remarks

Pokud není možnost SCROLL zadána v příkazu stylu DECLARE CURSOR ISO, NEXT je jedinou FETCH podporovanou možností. Pokud SCROLL je zadán ve stylu DECLARE CURSORISO, jsou podporovány všechny FETCH možnosti.

Při použití rozšíření kurzoru Transact-SQL DECLARE platí tato pravidla:

  • Pokud je zadána FORWARD_ONLY nebo FAST_FORWARD je zadána, NEXT je jedinou FETCH podporovanou možností.

  • Pokud DYNAMICnejsou FORWARD_ONLY zadány nebo FAST_FORWARD nejsou zadány a jeden z KEYSETSTATIC, nebo SCROLL jsou zadány, jsou podporovány všechny FETCH možnosti.

  • DYNAMIC SCROLL kurzory podporují všechny FETCH možnosti kromě ABSOLUTE.

Funkce @@FETCH_STATUS hlásí stav posledního FETCH příkazu. Stejné informace se zaznamenávají ve sloupci fetch_status kurzoru vráceném sp_describe_cursor. Tyto informace o stavu by se měly použít k určení platnosti dat vrácených příkazem před pokusem FETCH o jakoukoli operaci s daty. Další informace najdete v tématu @@FETCH_STATUS (Transact-SQL).

Permissions

Oprávnění pro výchozí nastavení FETCH pro libovolného platného uživatele

Examples

A. Použití funkce FETCH v jednoduchém kurzoru

Následující příklad deklaruje jednoduchý kurzor pro řádky v Person.Person tabulce s příjmením, které začíná Ba používá FETCH NEXT k procházení řádků. Příkazy FETCH vrátí hodnotu sloupce zadaného DECLARE CURSOR jako sada výsledků s jedním řádkem.

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. Použití funkce FETCH k ukládání hodnot v proměnných

Následující příklad je podobný příkladu A, s výjimkou výstupu FETCH příkazů je uložen v místních proměnných místo vrácení přímo klientovi. Příkaz PRINT kombinuje proměnné do jednoho řetězce a vrací je klientovi.

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. Deklarování kurzoru SCROLL a použití dalších možností FETCH

Následující příklad vytvoří SCROLL kurzor, který umožní úplné posouvání schopností prostřednictvím LAST, PRIOR, RELATIVEa ABSOLUTE možnosti.

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  

Viz také

ZAVŘÍT (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLAROVAT KURZOR (Transact-SQL)
OTEVŘÍT (Transact-SQL)