sp_cursorprepare (Transact-SQL)

S’applique à : SQL Server

Compile l’instruction de curseur ou le lot dans un plan d’exécution, mais ne crée pas le curseur. L’instruction compilée peut être utilisée ultérieurement par sp_cursorexecute. Cette procédure, couplée avec sp_cursorexecute, a la même fonction que sp_cursoropen, mais est divisée en deux phases. sp_cursorprepare est appelé en spécifiant ID = 3 dans un paquet TDS (Tabular Data Stream).

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

Arguments

prepared_handle

Identificateur préparé généré handle par SQL Server qui retourne une valeur int .

prepared_handle est ensuite fournie à une sp_cursorexecute procédure pour ouvrir un curseur. Une fois qu’un handle est créé, il existe jusqu’à ce que vous vous déconnectez, ou jusqu’à ce que vous le supprimiez explicitement par le biais d’une sp_cursorunprepare procédure.

params

Identifie des instructions paramétrables. La définition params des variables est remplacée par les marqueurs de paramètres dans l’instruction. params est un paramètre obligatoire qui appelle une valeur d’entrée ntext, nchar ou nvarchar . Entrez une NULL valeur si l’instruction n’est pas paramétrée.

Utilisez une chaîne ntext comme valeur d’entrée lorsque stmt est paramétré et que la valeur de défilement PARAMETERIZED_STMT est ON.

stmt

Définit le jeu de résultats de curseur. Le paramètre stmt est requis et appelle une valeur d’entrée ntext, **nchar ou nvarchar .

Les règles de spécification de la valeur stmt sont les mêmes que sp_cursoropen, à l’exception que le type de données de chaîne stmt doit être ntext.

options

Retourne une description des colonnes du jeu de résultats du curseur. Le paramètre d’options est int, avec la valeur par défaut NULL. Lorsqu’il est défini sur 0x0001, cela signifie RETURN_METADATA.

scrollopt

Option de défilement. Le paramètre scrollopt est un paramètre facultatif qui nécessite l’une des valeurs d’entrée int 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

Étant donné que la valeur demandée peut ne pas convenir au curseur défini par stmt, ce paramètre sert 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 OPTIMISTIC_ACCEPTABLE

Comme avec le défilement, SQL Server peut affecter une valeur différente de celle demandée.

Notes

Le paramètre d’état RPC est l’une des valeurs suivantes :

Valeur Description
0 Succès
0x0001 Échec
1FF6 Impossible de retourner les métadonnées.

Remarque : La raison en est que l’instruction ne produit pas de jeu de résultats ; par exemple, il s’agit d’une instruction DDL ou d’une INSERT instruction.

Exemples

Le code suivant est un exemple d’utilisation sp_cursorprepare et sp_cursorexecutede :

DECLARE @handle INT, @p5 INT, @p6 INT;

EXEC sp_cursorprepare @handle OUTPUT,
    N'@dbid int',
    N'select * from sys.databases where database_id < @dbid',
    1,
    @p5 OUTPUT,
    @p6 OUTPUT;

DECLARE @p1 INT
SET @P1 = @handle;

DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;

SET @P6 = 4;

EXEC sp_cursorexecute @p1,
    @p2 OUTPUT,
    @p3 OUTPUT,
    @p4 OUTPUT,
    @p5 OUTPUT,
    @p6;

EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;

Lorsque stmt est paramétré et que la valeur scrollopt PARAMETERIZED_STMT est ON, le format de la chaîne se présente sous la forme suivante :

<parameter_name> <data_type> [ ,... n ]