Partager via


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 RELATIVEopération de NEXTrécupération ou de PREVIOUS mise à jour ni de suppressions effectuées à l’aide sp_cursorde .

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 UPDATEdes valeurs , , DELETEou REFRESHLOCK 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, DELETEou ABSOLUTE LOCKREFRESHavec l’une ou l’autre UPDATE des DELETEvaleurs 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’une RELATIVEopération de NEXTrécupération ou PREVIOUS de mise à jour, ni aucune mise à jour ni suppression effectuée à l’aide de l’interface sp_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 position 1sur , sans erreur retournée. Une fois SETPOSITION exécutée, la position reste en vigueur jusqu’à l’opération suivante sp_cursorfetch , l’opération T-SQL FETCH ou sp_cursor SETPOSITION l’opération via le même curseur. Une opération suivante sp_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 une OR clause avec REFRESH, UPDATE, DELETEou LOCK 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, DELETEou 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 :

  1. 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.

  2. Utilisez un paramètre pour envoyer une instruction complète UPDATE ou INSERT utiliser plusieurs paramètres pour envoyer des parties d’une UPDATE ou INSERT 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é.