FETCH (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Base de données SQL dans Microsoft Fabric
Récupère une ligne spécifique d'un curseur côté serveur Transact-SQL.
Conventions de la syntaxe Transact-SQL
Syntaxe
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
Arguments
NEXT
Renvoie la ligne de résultats immédiatement après la ligne courante et incrémente cette dernière sur la ligne renvoyée. Si FETCH NEXT
est la première extraction effectuée sur un curseur, elle retourne la première ligne du jeu de résultats. NEXT
est l’option d’extraction du curseur par défaut.
PRIOR
Renvoie la ligne de résultats immédiatement avant la ligne courante, et décrémente cette dernière sur la ligne renvoyée. Si FETCH PRIOR
est la première extraction effectuée sur un curseur, aucune ligne n’est retournée et le curseur reste placé avant la première ligne.
FIRST
Renvoie la première ligne dans le curseur et la transforme en ligne courante.
LAST
Renvoie la dernière ligne dans le curseur et la transforme en ligne courante.
ABSOLUTE { n| @nvar}
Si n ou @nvar est un nombre positif, retourne la ligne située à n lignes du début du curseur et transforme la ligne retournée en nouvelle ligne actuelle. Si n ou @nvar est un nombre négatif, retourne la ligne située à n lignes de la fin du curseur et transforme la ligne retournée en nouvelle ligne actuelle. Si n ou @nvar est égal à 0, aucune ligne n’est retournée. n doit être une constante entière et @nvar du type smallint, tinyint ou int.
RELATIVE { n| @nvar}
Si n ou @nvar est un nombre positif, retourne la ligne située à n lignes au-delà de la ligne actuelle et transforme la ligne retournée en nouvelle ligne actuelle. Si n ou @nvar est un nombre négatif, retourne la ligne située à n lignes avant la ligne actuelle et transforme la ligne retournée en nouvelle ligne actuelle. Si n ou @nvar est égal à 0, la ligne actuelle est retournée. Si FETCH RELATIVE
est spécifié avec n ou @nvar défini sur un nombre négatif ou égal à 0 lors de la première extraction effectuée sur un curseur, aucune ligne n’est retournée. n doit être une constante entière et @nvar du type smallint, tinyint ou int.
GLOBAL
Indique que cursor_name fait référence à un curseur global.
cursor_name
Nom du curseur ouvert grâce auquel s'effectue l'extraction. Si un curseur global et un curseur local ont tous les deux le même nom cursor_name, cursor_name fait référence au curseur global si GLOBAL est spécifié, et au curseur local dans le cas contraire.
@cursor_variable_name
Nom d'une variable de curseur qui fait référence au curseur ouvert à partir duquel l'extraction doit être effectuée.
INTO @variable_name[ ,...n]
Permet aux données issues des colonnes d'une extraction d'être placées dans des variables locales. Chaque variable de la liste (de gauche à droite) est associée à la colonne correspondante dans le jeu de résultats du curseur. Le type de données de chaque variable doit correspondre ou être une conversion implicite du type de données de la colonne du jeu de résultats correspondante. Le nombre de variables doit correspondre au nombre de colonnes dans la liste de sélection du curseur.
Remarques
Si l’option SCROLL
n’est pas spécifiée dans une instruction DECLARE CURSOR
de style ISO, NEXT
est la seule option FETCH
prise en charge. Si SCROLL
est spécifié dans un DECLARE CURSOR
de style ISO, toutes les options FETCH
sont prises en charge.
Lorsque les extensions de curseur Transact-SQL DECLARE sont utilisées, les règles suivantes sont respectées :
Si
FORWARD_ONLY
ouFAST_FORWARD
est spécifié,NEXT
est la seule optionFETCH
prise en charge.Si
DYNAMIC
,FORWARD_ONLY
ouFAST_FORWARD
ne sont pas spécifiés, et qu’une des optionsKEYSET
,STATIC
ouSCROLL
sont spécifiées, toutes les optionsFETCH
sont prises en charge.Les curseurs
DYNAMIC SCROLL
prennent en charge toutes les optionsFETCH
, saufABSOLUTE
.
La fonction @@FETCH_STATUS
signale l’état de la dernière instruction FETCH
. Les mêmes informations sont enregistrées dans la colonne fetch_status du curseur renvoyé par sp_describe_cursor. Ces informations d’état doivent être utilisées pour déterminer la validité des données retournées par une instruction FETCH
avant de tenter une opération sur ces données. Pour plus d'informations, consultez @@FETCH_STATUS (Transact-SQL).
Autorisations
Par défaut, tout utilisateur valide a l’autorisation d’utiliser l’instruction FETCH
.
Exemples
R. Utilisation de FETCH dans un curseur simple
L'exemple suivant déclare un curseur simple pour les lignes de la table Person.Person
dont le nom commence par B
, et il utilise FETCH NEXT
pour parcourir les lignes. L'instruction FETCH
renvoie la valeur de la colonne spécifiée dans DECLARE CURSOR
comme un jeu de résultats sur une seule ligne.
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. Utilisation de FETCH pour stocker des valeurs dans des variables
L'exemple suivant ressemble au précédent, excepté que le résultat des instructions FETCH
est stocké dans des variables locales au lieu d'être directement renvoyé au client. L'instruction PRINT
combine les variables dans une chaîne unique et les renvoie au client.
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. Déclaration d'un curseur SCROLL et utilisation des autres options FETCH
L'exemple suivant crée un curseur SCROLL
pour autoriser des capacités de défilement complètes à travers les options LAST
, PRIOR
, RELATIVE
et 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
Voir aussi
CLOSE (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
OPEN (Transact-SQL)