Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Načte konkrétní řádek z kurzoru serveru 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
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_ONLYneboFAST_FORWARDje zadána,NEXTje jedinouFETCHpodporovanou možností.Pokud
DYNAMICnejsouFORWARD_ONLYzadány neboFAST_FORWARDnejsou zadány a jeden zKEYSETSTATIC, neboSCROLLjsou zadány, jsou podporovány všechnyFETCHmožnosti.DYNAMIC SCROLLkurzory podporují všechnyFETCHmož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)