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.

[!REMARQUE]

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 statiques ou de jeux de clés 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.

Exemple

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

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