Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S'applique à :SQL Server
Ouvre un curseur.
sp_cursoropen définit l’instruction SQL associée aux options de curseur et de curseur, puis remplit le curseur.
sp_cursoropen équivaut à la combinaison des instructions DECLARE_CURSOR Transact-SQL et OPEN. Cette procédure est appelée en spécifiant ID = 2 dans un paquet TDS (Tabular Data Stream).
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
Arguments
Important
Les arguments des procédures stockées étendues doivent être entrés dans l’ordre spécifique, comme décrit dans la section syntaxe. Si les paramètres sont entrés hors ordre, un message d’erreur se produit.
cursor
Identificateur de curseur généré par SQL Server.
le curseur est une handle valeur qui doit être fournie sur toutes les procédures suivantes impliquant le curseur, par sp_cursorfetchexemple . Le paramètre de curseur est int et ne peut pas être NULL.
le curseur permet à plusieurs curseurs d’être actifs sur une seule connexion de base de données.
stmt
Paramètre obligatoire qui définit le jeu de résultats du curseur. Toute chaîne de requête valide (syntaxe et liaison) de n’importe quel type de chaîne (quel que soit Unicode, taille, etc.) peut servir de type valeur stmt valide.
scrollopt
Option de défilement. Le paramètre scrollopt est int, avec une valeur par défaut NULL, et peut être l’une des valeurs suivantes.
| Valeur | Description |
|---|---|
0x0001 |
KEYSET |
0x0002 |
DYNAMIC |
0x0004 |
FORWARD_ONLY |
0x0008 |
STATIC |
0x10 |
FAST_FORWARD |
0x1000 |
PARAMETERIZED_STMT |
0x2000 |
AUTO_FETCH |
0x4000 |
AUTO_CLOSE |
0x8000 |
CHECK_ACCEPTED_TYPES |
0x10000 |
KEYSET_ACCEPTABLE |
0x20000 |
DYNAMIC_ACCEPTABLE |
0x40000 |
FORWARD_ONLY_ACCEPTABLE |
0x80000 |
STATIC_ACCEPTABLE |
0x100000 |
FAST_FORWARD_ACCEPTABLE |
En raison de la possibilité que la valeur demandée ne soit pas appropriée pour le curseur défini par stmt, ce paramètre sert à la fois d’entrée et de sortie. Dans de tels cas, SQL Server affecte une valeur appropriée.
ccopt
Option de contrôle en matière d'accès concurrentiel. ccopt est un paramètre facultatif qui nécessite l’une des valeurs d’entrée int suivantes.
| Valeur | Description |
|---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (précédemment appelé LOCKCC) |
0x0004 |
OPTIMISTIC (précédemment appelé OPTCC) |
0x0008 |
OPTIMISTIC (précédemment appelé OPTCCVAL) |
0x2000 |
ALLOW_DIRECT |
0x4000 |
UPDT_IN_PLACE |
0x8000 |
CHECK_ACCEPTED_OPTS |
0x10000 |
READ_ONLY_ACCEPTABLE |
0x20000 |
SCROLL_LOCKS_ACCEPTABLE |
0x40000 |
OPTIMISTIC_ACCEPTABLE |
0x80000 |
OPTIMISITC_ACCEPTABLE |
Comme avec scrollopt, SQL Server peut remplacer les valeurs ccopt demandées.
rowcount
Nombre de lignes de mémoire tampon de récupération à utiliser avec AUTO_FETCH. La valeur par défaut est de 20 lignes.
rowcount se comporte différemment lorsqu’il est affecté en tant que valeur d’entrée par rapport à une valeur de retour.
| Comme une valeur d'entrée | Comme une valeur de retour |
|---|---|
Lorsque la valeur scrollopt est spécifiée, le AUTO_FETCHnombre de lignes à placer dans la mémoire tampon d’extraction représente le nombre de lignes à placer.Remarque : > 0 est une valeur valide quand AUTO_FETCH elle est spécifiée, mais elle est sinon ignorée. |
Représente le nombre de lignes dans le jeu de résultats, sauf lorsque la valeur scrolloptAUTO_FETCH est spécifiée. |
boundparam
Signifie l’utilisation de paramètres supplémentaires.
boundparam est un paramètre facultatif qui doit être spécifié si la valeur scrolloptPARAMETERIZED_STMT est définie sur ON.
Valeurs des codes de retour
Si aucune erreur n’est générée, sp_cursoropen retourne l’une des valeurs suivantes.
| Valeur | Description |
|---|---|
0 |
La procédure s’est exécutée avec succès. |
0x0001 |
Une erreur s'est produite pendant l'exécution (une erreur mineure, pas assez grave pour générer une erreur dans l'opération). |
0x0002 |
Une opération asynchrone est en cours. |
0x0002 |
Une FETCH opération est en cours. |
A |
Ce curseur a été désalloué et n’est pas disponible. |
Lorsqu’une erreur est générée, les valeurs de retour peuvent être incohérentes et la précision ne peut pas être garantie.
Lorsque le paramètre rowcount est spécifié comme valeur de retour, le jeu de résultats suivant se produit.
| Valeur | Description |
|---|---|
-1 |
Retourné si le nombre de lignes est inconnu ou non applicable. |
-n |
Retourné lorsqu'un remplissage asynchrone est appliqué. Représente le nombre de lignes qui ont été placées dans la mémoire tampon d’extraction lorsque la valeur scrolloptAUTO_FETCH est spécifiée. |
Si l'appel de procédure distante est utilisé, les valeurs de retour sont les suivantes.
| Valeur | Description |
|---|---|
0 |
La procédure est réussie. |
1 |
La procédure a échoué. |
2 |
Un curseur de jeu de clés est généré de façon asynchrone. |
16 |
Un curseur rapide vers l’avant a été automatiquement fermé. |
Si la sp_cursoropen procédure s’exécute correctement, les paramètres de retour RPC et un jeu de résultats avec les informations de format de colonne TDS (0xa0 et 0xa1 les messages) sont envoyés. En cas d'échec, un ou plusieurs messages d'erreur TDS sont envoyés. Dans les deux cas, aucune donnée de ligne n’est retournée et le nombre de DONE messages est 0.
0x81 est retourné (standard pour SELECT les instructions) ainsi que les 0xa5 flux de 0xa4 jetons.
Notes
Paramètre stmt
Si stmt spécifie l’exécution d’une procédure stockée, les paramètres d’entrée peuvent être définis en tant que constantes dans le cadre de la chaîne stmt, ou spécifiées en tant qu’arguments boundparam. Les variables déclarées peuvent être passées comme paramètres liés de cette façon.
Le contenu autorisé du paramètre stmt dépend du fait que la valeur de retour ccoptALLOW_DIRECT a été liée au OR reste des valeurs ccopt :
Si
ALLOW_DIRECTce n’est pas spécifié, une instruction Transact-SQLSELECTouEXECUTEappelant une procédure stockée contenant une instruction uniqueSELECTdoit être utilisée. En outre, l’instructionSELECTdoit être qualifiée de curseur ; autrement dit, elle ne peut pas contenir les mots clésSELECT INTOouFOR BROWSE.Si
ALLOW_DIRECTelle est spécifiée, cela peut entraîner une ou plusieurs instructions Transact-SQL, y compris les instructions qui exécutent d’autres procédures stockées avec plusieurs instructions. Les instructions non-instructionsSELECTou touteSELECTinstruction qui contient les mots clésSELECT INTOouFOR BROWSEsont exécutées, et n’entraînent pas la création d’un curseur. Il en va de même pour toutes lesSELECTinstructions incluses dans un lot d’instructions multiples. Dans les cas où uneSELECTinstruction contient des clauses qui se rapportent uniquement aux curseurs, ces clauses sont ignorées. Par exemple, lorsque la valeur de ccopt est0x2002, il s’agit d’une demande pour :Un curseur avec des verrous de défilement, s’il n’existe qu’une seule
SELECTinstruction qui se qualifie comme curseur ouExécution d’une instruction directe s’il existe plusieurs instructions, une seule instruction non-instruction
SELECTou uneSELECTinstruction qui ne se qualifie pas comme curseur.
Paramètre scrollopt
Les cinq premières valeurs scrollopt (KEYSEY, , DYNAMICFORWARD_ONLY, STATICet FAST_FORWARD) s’excluent mutuellement.
PARAMETERIZED_STMT et CHECK_ACCEPTED_TYPES peut être lié à OR l’une des cinq premières valeurs.
AUTO_FETCH et AUTO_CLOSE peut être lié par ORFAST_FORWARD.
Si CHECK_ACCEPTED_TYPES c’est ON, au moins l’une des cinq dernières valeurs scrollopt (KEYSET_ACCEPTABLE, DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLE, STATIC_ACCEPTABLEou FAST_FORWARD_ACCEPTABLE) doit également être ON.
STATIC les curseurs sont toujours ouverts en tant que READ_ONLY. Cela signifie que la table sous-jacente ne peut pas être mise à jour via ce curseur.
Paramètre ccopt
Les quatre premières valeurs ccopt (READ_ONLYet SCROLL_LOCKSles deux OPTIMISTIC valeurs) s’excluent mutuellement.
Remarque
Le choix de l’une des quatre premières valeurs ccopt détermine si le curseur est en lecture seule ou si les méthodes de verrouillage ou optimistes sont utilisées pour empêcher les mises à jour perdues. Si aucune valeur ccopt n’est spécifiée, la valeur par défaut est OPTIMISTIC.
ALLOW_DIRECT et CHECK_ACCEPTED_TYPES peut être lié à OR l’une des quatre premières valeurs.
UPDT_IN_PLACE peut être lié par ORREAD_ONLY, SCROLL_LOCKSou l’une des OPTIMISTIC valeurs.
Si CHECK_ACCEPTED_TYPES c’est ONle cas, au moins l’une des quatre dernières valeurs ccopt (READ_ONLY_ACCEPTABLESCROLL_LOCKS_ACCEPTABLEet l’une OPTIMISTIC_ACCEPTABLE des valeurs) doit également être ON.
Position UPDATE et DELETE fonctions peuvent être effectuées uniquement dans la mémoire tampon d’extraction et uniquement si la SCROLL_LOCKS est égale ou OPTIMISTIC. S’il SCROLL_LOCKS s’agit de la valeur spécifiée, l’opération est garantie de réussir. Si OPTIMISTIC la valeur spécifiée est spécifiée, l’opération échoue si la ligne a changé depuis sa dernière extraction.
La raison de cet échec est que, lorsqu’il OPTIMISTIC s’agit de la valeur spécifiée, une fonction de contrôle monétaire optimiste est effectuée en comparant les horodatages ou les valeurs de somme de contrôle, comme déterminé par SQL Server. Si l’une de ces lignes ne correspond pas, l’opération échoue.
La spécification UPDT_IN_PLACE en tant que valeur de retour régit les résultats suivants :
S’il n’est pas défini lors de l’exécution d’une mise à jour positionnée sur une table avec un index unique, le curseur supprime la ligne de sa table de travail et l’insère à la fin de l’une des colonnes clés utilisées par le curseur, ce qui modifie ces colonnes.
Si la valeur est définie
ON, le curseur met à jour les colonnes clés dans la ligne d’origine de la table de travail.
Paramètre bound_param
Le nom du paramètre doit être paramdef lorsqu’il PARAMETERIZED_STMT est spécifié, en fonction du message d’erreur dans le code. Quand PARAMETERIZED_STMT ce n’est pas spécifié, aucun nom n’est spécifié dans le message d’erreur.
Considérations relatives à RPC
L’indicateur d’entrée RPC RETURN_METADATA peut être défini pour 0x0001 demander que les métadonnées de liste de sélection de curseur soient retournées dans le flux TDS.
Exemples
R. Paramètre bound_param
Tous les paramètres après le cinquième sont passés au plan d'instruction comme paramètres d'entrée. Le premier paramètre de ce type doit être une chaîne sous la forme suivante :
<parameter_name> <data_type> [ ,... n ]
Les paramètres suivants sont utilisés pour transmettre les valeurs à remplacer par l’instruction <parameter_name> .