OPEN (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Ouvre un curseur côté serveur Transact-SQL et remplit ce dernier en exécutant l’instruction Transact-SQL spécifiée dans l’instruction DECLARE CURSOR ou SET cursor_variable.

Conventions de la syntaxe Transact-SQL

Syntaxe

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Arguments

GLOBAL
Indique que cursor_name fait référence à un curseur global.

cursor_name
Représente le nom d'un curseur déclaré. 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é ; sinon, cursor_name fait référence au curseur local.

cursor_variable_name
Nom d'une variable de curseur faisant référence à un curseur.

Remarques

Si le curseur est déclaré avec l'option INSENSITIVE ou STATIC, OPEN crée une table temporaire pour recueillir l'ensemble de résultats. OPEN échoue si la longueur d'une ligne de l'ensemble de résultats est supérieure à la longueur de ligne maximale des tables SQL Server. Si le curseur est déclaré avec l'option KEYSET, OPEN crée une table temporaire pour recueillir le jeu de clés. Les tables temporaires sont stockées dans tempdb.

Après avoir ouvert un curseur, utilisez la fonction @@CURSOR_ROWS pour recevoir le nombre de lignes éligibles dans le dernier curseur ouvert.

Notes

SQL Server ne prend pas en charge la génération asynchrone de curseurs Transact-SQL pilotés par jeux de clés ou statiques. Les opérations Transact-SQL sur les curseurs telles que OPEN ou FETCH sont exécutées par lot : la génération asynchrone de curseurs Transact-SQL n'est donc pas nécessaire. SQL Server continue de prendre en charge les curseurs côté serveur d’API pilotés par jeux de clés ou statiques asynchrones si l’opération de curseur OPEN présente une latence trop faible, en raison des boucles clientes de chaque opération de curseur.

Exemples

L'exemple suivant ouvre un curseur et extrait toutes les lignes.

DECLARE Employee_Cursor CURSOR FOR  
SELECT LastName, FirstName  
FROM AdventureWorks2022.HumanResources.vEmployee  
WHERE LastName like 'B%';  
  
OPEN Employee_Cursor;  
  
FETCH NEXT FROM Employee_Cursor;  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    FETCH NEXT FROM Employee_Cursor  
END;  
  
CLOSE Employee_Cursor;  
DEALLOCATE Employee_Cursor;  

Voir aussi

CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
FETCH (Transact-SQL)