sp_cursor (Transact-SQL)
S’applique à : SQL Server
Demande des mises à jour positionnées. Cette procédure effectue des opérations sur une ou plusieurs lignes dans le tampon d'extraction d'un curseur. sp_cursor
est appelé en spécifiant ID = 1
dans un paquet TDS (Tabular Data Stream).
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Arguments
cursor
Handle de curseur. Le paramètre de curseur est int et ne peut pas être NULL
. Ce paramètre est la handle
valeur générée par l’Moteur de base de données et retournée par la sp_cursoropen
procédure.
optype
Paramètre obligatoire qui désigne l’opération effectuée par le curseur. Le paramètre optype nécessite l’une des valeurs suivantes.
Valeur | Nom | Description |
---|---|---|
0X0001 |
UPDATE |
Utilisée pour mettre à jour une ou plusieurs lignes dans le tampon d'extraction. Les lignes spécifiées dans rownum sont reaccessées et mises à jour. |
0x0002 |
DELETE |
Utilisée pour supprimer une ou plusieurs lignes dans le tampon d'extraction. Les lignes spécifiées dans rownum sont reaccessées et supprimées. |
0X0004 |
INSERT |
Insère des données sans générer d’instruction INSERT . |
0X0008 |
REFRESH |
Permet de remplir la mémoire tampon à partir de tables sous-jacentes et peut être utilisée pour actualiser la ligne en cas d’échec d’une mise à jour ou d’une suppression en raison d’un contrôle d’accès concurrentiel optimiste ou après un UPDATE . |
0X10 |
LOCK |
Provoque l’acquisition d’un verrou de mise à jour (U) sur la page contenant la ligne spécifiée. Ce verrou est compatible avec les verrous partagés (S), mais pas avec des verrous exclusifs (X) ou d’autres verrous de mise à jour. Permet d'implémenter le verrouillage à court terme. |
0X20 |
SETPOSITION |
Est utilisé uniquement lorsque le programme va émettre une instruction ou UPDATE une instruction ultérieureDELETE . |
0X40 |
ABSOLUTE |
Peut être utilisé uniquement avec UPDATE ou DELETE . ABSOLUTE est utilisé uniquement avec KEYSET les curseurs (est ignoré pour DYNAMIC les curseurs) et STATIC les curseurs ne peuvent pas être mis à jour.Remarque : Si ABSOLUTE elle est spécifiée sur une ligne de l’ensemble de clés qui n’a pas été récupéré, l’opération peut échouer à la vérification de la concurrence et le résultat de retour ne peut pas être garanti. |
rownum
Spécifie les lignes de la mémoire tampon d’extraction sur lesquelles le curseur fonctionne, les mises à jour ou les suppressions. Ce paramètre n’affecte pas le point de départ d’une RELATIVE
opération de NEXT
récupération ou de PREVIOUS
mise à jour ni de suppressions effectuées à l’aide sp_cursor
de .
rownum est un paramètre obligatoire qui appelle une valeur d’entrée int .
1
Indique la première ligne dans le tampon d'extraction.
2, 3, 4, ...n
Signifie la deuxième, la troisième et la quatrième ligne, et ainsi de suite.
0
Indique toutes les lignes dans le tampon d'extraction.
Ce paramètre est valide uniquement pour une utilisation avec UPDATE
des valeurs , , DELETE
ou REFRESH
LOCK
optype.
table
Nom de table qui identifie la table à laquelle optype s’applique lorsque la définition du curseur implique une jointure ou des noms de colonnes ambigus sont retournés par le paramètre valeur . Si aucune table spécifique n’est désignée, la valeur par défaut est la première table de la FROM
clause. Le paramètre de table est facultatif et nécessite une valeur d’entrée de chaîne. La chaîne peut être spécifiée sous la forme d’un caractère ou d’un type de données Unicode ou d’un nom de table à plusieurs parties.
value
Permet d'insérer ou de mettre à jour des valeurs. Le paramètre de chaîne de valeur est utilisé uniquement avec UPDATE
les INSERT
valeurs optype . La chaîne peut être spécifiée comme tout caractère ou type de données Unicode.
Les noms de paramètres pour la valeur peuvent être attribués par l’utilisateur.
Valeurs des codes de retour
0
(réussite) or 1
(échec).
Notes
Paramètre optype
À l’exception des combinaisons de valeurs avec SETPOSITION
UPDATE
, DELETE
ou ABSOLUTE
LOCK
REFRESH
avec l’une ou l’autre UPDATE
des DELETE
valeurs optype sont mutuellement exclusives.
La SET
clause de la UPDATE
valeur est construite à partir du paramètre valeur .
L’un des avantages de l’utilisation de la INSERT <optype>
valeur est que vous pouvez éviter de convertir des données non-caractères en format caractère pour les insertions. Les valeurs sont spécifiées de la même façon que UPDATE
. Si aucune colonne requise n’est incluse, la INSERT
valeur échoue.
- La
SETPOSITION
valeur n’affecte pas le point de départ d’uneRELATIVE
opération deNEXT
récupération ouPREVIOUS
de mise à jour, ni aucune mise à jour ni suppression effectuée à l’aide de l’interfacesp_cursor
. N’importe quel nombre qui ne spécifie pas de ligne dans la mémoire tampon d’extraction, entraîne la définition de la position1
sur , sans erreur retournée. Une foisSETPOSITION
exécutée, la position reste en vigueur jusqu’à l’opération suivantesp_cursorfetch
, l’opération T-SQLFETCH
ousp_cursor
SETPOSITION
l’opération via le même curseur. Une opération suivantesp_cursorfetch
définit la position du curseur sur la première ligne de la nouvelle mémoire tampon d’extraction, tandis que d’autres appels de curseur n’affectent pas la valeur de la position.SETPOSITION
peut être lié par uneOR
clause avecREFRESH
,UPDATE
,DELETE
ouLOCK
pour définir la valeur de la position sur la dernière ligne modifiée.
Si une ligne dans la mémoire tampon d’extraction n’est pas spécifiée par le paramètre rownum , la position est définie sur 1, sans erreur retournée. Une fois la position définie, elle reste en vigueur jusqu’à ce que l’opération suivante sp_cursorfetch
, l’opération T-SQL FETCH
ou sp_cursor
SETPOSITION
l’opération soit effectuée sur le même curseur.
SETPOSITION
peut être lié par une OR
clause avec REFRESH
, UPDATE
, DELETE
ou LOCK
pour définir la position du curseur sur la dernière ligne modifiée.
Paramètre rownum
S’il est spécifié, le paramètre rownum peut être interprété comme le numéro de ligne dans le jeu de clés au lieu du numéro de ligne dans la mémoire tampon d’extraction. L'utilisateur est chargé de garantir que le contrôle d'accès concurrentiel est tenu à jour. Cela signifie que pour SCROLL_LOCKS
les curseurs, vous devez conserver indépendamment un verrou sur la ligne donnée (qui peut être effectuée via une transaction). Pour OPTIMISTIC
les curseurs, vous devez avoir précédemment extrait la ligne pour effectuer cette opération.
Paramètre de table
Si la valeur optype est UPDATE
ou INSERT
si une instruction de mise à jour ou d’insertion complète est envoyée en tant que paramètre valeur , la valeur spécifiée pour la table est ignorée.
Remarque
En ce qui concerne les vues, une seule table participant à la vue peut être modifiée. Les noms des colonnes de paramètre de valeur doivent refléter les noms des colonnes dans la vue, mais le nom de la table peut être celui de la table de base sous-jacente (auquel cas sp_cursor
remplace le nom de la vue).
Paramètre de valeur
Il existe deux alternatives aux règles d’utilisation de la valeur , comme indiqué précédemment dans la section Arguments :
Vous pouvez utiliser un nom qui est
@
ajouté au nom de la colonne dans la liste de sélection pour tous les paramètres de valeur nommés. L’un des avantages de cette alternative est que la conversion de données peut ne pas être nécessaire.Utilisez un paramètre pour envoyer une instruction complète
UPDATE
ouINSERT
utiliser plusieurs paramètres pour envoyer des parties d’uneUPDATE
ouINSERT
une instruction, que l’Moteur de base de données génère ensuite dans une instruction complète. Vous trouverez des exemples dans la section Exemples plus loin dans cet article.
Exemples
Les autres paramètres de valeur utilisent
Pour UPDATE
Lorsqu’un paramètre unique est utilisé, une UPDATE
instruction peut être envoyée à l’aide de la syntaxe suivante :
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Si UPDATE <table_name>
elle est spécifiée, toute valeur spécifiée pour le paramètre de table est ignorée.
Lorsque plusieurs paramètres sont utilisés, le premier paramètre doit être une chaîne sous la forme suivante :
[ SET ] <column name> = expression [ , ...n ]
Les paramètres suivants doivent être sous la forme suivante :
<column name> = expression [ , ...n ]
Dans ce cas, l’instruction <table_name>
de mise à jour construite est celle spécifiée ou définie par défaut par le paramètre de table .
Pour INSERT
Lorsqu’un paramètre unique est utilisé, une INSERT
instruction peut être envoyée à l’aide de la syntaxe suivante :
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Si INSERT <table_name>
elle est spécifiée, toute valeur spécifiée pour le paramètre de table est ignorée.
Lorsque plusieurs paramètres sont utilisés, le premier paramètre doit être une chaîne sous la forme suivante :
[ VALUES ] ( <expression> [ , ...n ] )
Les paramètres suivants doivent être sous la forme de expression [ , ...n ]
, sauf quand VALUES
ils ont été spécifiés, auquel cas il doit y avoir une fin )
après la dernière expression. Dans ce cas, l’instruction <table_name>
construite UPDATE
est celle spécifiée ou définie par défaut par le paramètre de table .
Remarque
Il est possible d’envoyer un paramètre en tant que paramètre nommé, par exemple @values
. Dans ce cas, aucun autre paramètre nommé ne peut être utilisé.