OPEN (Transact-SQL)

Ouvre un curseur de 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.

Icône Lien de rubriqueConventions de la syntaxe de 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é. S'il existe deux curseurs, un global et un local nommés cursor_name, la variable cursor_name fait référence au curseur global si GLOBAL est spécifié, sinon elle fait référence au curseur local.

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

Notes

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 de curseurs Transact-SQL pilotés par jeu de clés ou statiques de façon asynchrone. Les opérations de curseur Transact-SQL, comme OPEN ou FETCH, s'effectuent par lots ; c'est pourquoi la génération asynchrone de curseurs Transact-SQL n'est pas nécessaire. SQL Server prend toujours en charge les curseurs côté serveur d'API asynchrones pilotés par jeu de clés ou statiques lorsqu'une opération OPEN à faible latence pose un problème en raison du nombre de boucles de clients pour chaque opération de curseur.

Exemple

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

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2008R2.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;