Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Egy adott sort kér le egy Transact-SQL kiszolgálói kurzorból.
Transact-SQL szintaxis konvenciók
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
Az aktuális sort közvetlenül követő eredménysort adja vissza, és az aktuális sort a visszaadott sorra növeli. Ha FETCH NEXT az első beolvasás egy kurzorhoz, akkor az eredményhalmaz első sorát adja vissza.
NEXT az alapértelmezett kurzorlehívási beállítás.
PRIOR
Az aktuális sort közvetlenül megelőző eredménysort adja vissza, és az aktuális sort a visszaadott sorra halasztja. Ha FETCH PRIOR az első beolvasás egy kurzorhoz, a kurzor nem ad vissza sort, és a kurzor az első sor előtt van elhelyezve.
FIRST
A kurzor első sorát adja vissza, és az aktuális sor lesz.
LAST
A kurzor utolsó sorát adja vissza, és az aktuális sor lesz.
ABSZOLÚT { n| @nvar}
Ha n vagy @nvar pozitív, akkor az n sorokat adja vissza a kurzor elejéről, és a visszaadott sort az új aktuális sorsá teszi. Ha n vagy @nvar negatív, akkor a kurzor vége előtti n sort adja vissza, és a visszaadott sort az új aktuális sorsá teszi. Ha n vagy @nvar 0, akkor a rendszer nem ad vissza sorokat.
Az n-nek egész számállandónak kell lennie, a @nvarnakpedig kicsinek, tinyintnek vagy intnek kell lennie.
RELATIVE { n| @nvar}
Ha n vagy @nvar pozitív, az aktuális soron túli n sort adja vissza, és a visszaadott sort az új aktuális sorsá teszi. Ha n vagy @nvar negatív, az aktuális sor előtti n sort adja vissza, és a visszaadott sort az új aktuális sorsá teszi. Ha n vagy @nvar 0, az aktuális sort adja vissza. Ha FETCH RELATIVEaz n vagy a @nvar értéke negatív, vagy 0 a kurzoron végzett első beolvasáskor, akkor a program nem ad vissza sorokat.
Az n-nek egész számállandónak kell lennie, a @nvarnakpedig kicsinek, tinyintnek vagy intnek kell lennie.
GLOBAL
Megadja, hogy cursor_name globális kurzorra hivatkozik.
cursor_name
Annak a nyitott kurzornak a neve, amelyből a beolvasást el kell készíteni. Ha egy globális és egy helyi kurzor is létezik, cursor_name a nevük, cursor_name a globális kurzorra, ha a GLOBAL van megadva, és a helyi kurzorra, ha a GLOBAL nincs megadva.
@
cursor_variable_name
Az a kurzorváltozó neve, amely arra a nyitott kurzorra hivatkozik, amelyből a beolvasást el kell készíteni.
INTO @variable_name[ ,... n]
Lehetővé teszi, hogy a beolvasás oszlopaiból származó adatok helyi változókba kerüljenek. A lista minden változója balról jobbra a kurzor eredményhalmazának megfelelő oszlophoz van társítva. Az egyes változók adattípusának egyeznie kell, vagy támogatott implicit konverziónak kell lennie a megfelelő eredményhalmaz oszlop adattípusának. A változók számának meg kell egyeznie a kurzor kijelölési listájában szereplő oszlopok számával.
Remarks
Ha a SCROLL beállítás nincs megadva ISO-stílusutasításban DECLARE CURSOR , NEXT az egyetlen FETCH támogatott lehetőség. Ha SCROLL ISO-stílusban DECLARE CURSORvan megadva, minden FETCH beállítás támogatott.
A Transact-SQL DEKLARÁLT kurzorbővítmények használatakor a következő szabályok érvényesek:
Ha vagy
FORWARD_ONLYFAST_FORWARDmeg van adva,NEXTaz egyetlenFETCHtámogatott lehetőség.Ha
DYNAMICvagyFORWARD_ONLYFAST_FORWARDnincs megadva, és az egyikKEYSET,STATICvagySCROLLmeg van adva, az összesFETCHbeállítás támogatott.DYNAMIC SCROLLA kurzorok az összes beállítást támogatják, kivéve aFETCHkövetkezőtABSOLUTE:
A @@FETCH_STATUS függvény az utolsó FETCH utasítás állapotát jelenti. Ugyanezeket az adatokat a sp_describe_cursor által visszaadott kurzor fetch_status oszlopában rögzíti a rendszer. Ezeket az állapotinformációkat kell használni az utasítások által FETCH visszaadott adatok érvényességének meghatározására, mielőtt bármilyen műveletet megkísérelnek az adatokkal szemben. További információ: @@FETCH_STATUS (Transact-SQL).
Permissions
FETCH Az alapértelmezett engedélyek bármely érvényes felhasználóra vonatkozóan.
Examples
A. A FETCH használata egyszerű kurzoron
Az alábbi példa egy egyszerű kurzort deklarál a Person.Person táblázat soraihoz egy vezetéknévvel, amely a következővel Bkezdődik, és a sorok végiglépésére szolgál FETCH NEXT . Az FETCH utasítások egysoros eredményhalmazként megadott DECLARE CURSOR oszlop értékét adja vissza.
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. Értékek tárolása változókban a FETCH használatával
Az alábbi példa hasonló az A példához, kivéve, hogy az FETCH utasítások kimenete helyi változókban van tárolva, ahelyett, hogy közvetlenül az ügyfélnek adódik vissza. Az PRINT utasítás egyetlen sztringbe egyesíti a változókat, és visszaadja őket az ügyfélnek.
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. SCROLL kurzor deklarálása és a többi FETCH beállítás használata
Az alábbi példa egy kurzort SCROLL hoz létre, amely lehetővé teszi a teljes görgetési képességeket a LAST, PRIOR, RELATIVEés ABSOLUTE a beállítások között.
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
Lásd még:
ZÁRT (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLARÁLT KURZOR (Transact-SQL)
NYISD (Transact-SQL)