sp_describe_cursor_tables (Transact-SQL)

Fournit un rapport des objets ou tables de base référencés par un curseur côté serveur.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

sp_describe_cursor_tables 
     [ @cursor_return = ] output_cursor_variable OUTPUT 
     { [ , [ @cursor_source = ] N'local'
          , [ @cursor_identity = ] N'local_cursor_name' ] 
   | [ , [ @cursor_source = ] N'global'
          , [ @cursor_identity = ] N'global_cursor_name' ] 
   | [ , [ @cursor_source = ] N'variable'
          , [ @cursor_identity = ] N'input_cursor_variable' ] 
     } 
[;]

Arguments

  • [ @cursor_return = ] output_cursor_variableOUTPUT
    Nom d'une variable de curseur déclarée devant recevoir la sortie du curseur. L'argument output_cursor_variable est de type cursor, il n'a pas de valeur par défaut et ne doit pas être associé à des curseurs au moment où la procédure sp_describe_cursor_tables est appelée. Le curseur retourné est un curseur en lecture seule, dynamique et permettant les défilements.

  • [ @cursor_source = ] { N'local' | N'global' | N'variable' }
    Précise si le curseur objet du rapport est défini avec le nom d'un curseur local, d'un curseur global ou d'une variable de curseur. Le paramètre est de type nvarchar(30).

  • [ @cursor_identity = ] N'local_cursor_name'
    Nom d'un curseur créé par une instruction DECLARE CURSOR contenant soit le mot clé LOCAL, soit celui défini par défaut pour LOCAL. local_cursor_name est de type nvarchar(128).

  • [ @cursor_identity = ] N'global_cursor_name'
    Indique le nom d'un curseur créé par une instruction DECLARE CURSOR ayant le mot clé GLOBAL ou, par défaut, la valeur GLOBAL. global_cursor_name peut également être le nom du curseur côté serveur d'API ouvert par une application ODBC qui a ensuite nommé le curseur en appelant SQLSetCursorName.global_cursor_name est du type nvarchar(128).

  • [ @cursor_identity = ] N'input_cursor_variable'
    Nom d'une variable de curseur associée à un curseur ouvert. input_cursor_variable est de type nvarchar(128).

Valeurs des codes retournés

Aucune

Curseurs renvoyés

sp_describe_cursor_tables encapsule son rapport en paramètre de sortie Transact-SQLcursor. Ceci permet aux lots Transact-SQL, aux procédures stockées et aux déclencheurs de travailler sur une seule ligne de résultat à la fois. Par ailleurs, la procédure ne peut pas être appelée directement depuis les fonctions d'API. Le paramètre de sortie cursor doit être lié à une variable de programme, mais les API ne prennent pas en charge les paramètres ou les variables cursor de liaison.

La table suivante montre le format du curseur qui est retourné en utilisant sp_describe_cursor_tables.

Nom de colonne

Type de données

Description

table_owner

sysname

ID d'utilisateur du propriétaire de table

table_name

sysname

Nom de l'objet ou de la table de base. Dans SQL Server, les curseurs côté serveur retournent toujours l'objet défini par l'utilisateur, et non les tables de base. Dans SQL Server 2000, les curseurs de serveur retournent les tables de base, sauf si la vue ou fonction est créée à l'aide de WITH VIEW_METADATA.

optimizer_hint

smallint

Bitmap composée d'un ou plusieurs des éléments suivants :

1 = Verrouillage au niveau de la ligne (ROWLOCK)

4 = Verrouillage au niveau de la page (PAGELOCK)

8 = Verrou de table (TABLOCK)

16 = Verrou de table exclusif (TABLOCKX)

32 = Verrou de mise à jour (UPDLOCK)

64 = Pas de verrou (NOLOCK)

128 = Option de première ligne rapide (FASTFIRST)

4096 = Lecture des sémantiques répétées lorsqu'elles sont utilisées avec DECLARE CURSOR (HOLDLOCK)

Si vous fournissez plusieurs options, le système utilise les plus restrictives. Toutefois, sp_describe_cursor_tables affiche les indicateurs spécifiés dans la requête.

lock_type

smallint

Type de verrou de défilement demandé soit explicitement, soit implicitement pour chaque table de base sous-jacente de ce curseur. La valeur peut être l'une des suivantes :

0 = Aucun

1 = Partagé

3 = Mise à jour

server_name

sysname, nullable

Nom du serveur lié sur lequel réside la table. Prend la valeur NULL lorsque OPENQUERY ou OPENROWSET sont utilisés.

objectid

int

ID d'objet de la table. Prend la valeur 0 lorsque OPENQUERY ou OPENROWSET sont utilisés.

dbid

int

ID de la base de données dans laquelle réside la table. Prend la valeur 0 lorsque OPENQUERY ou OPENROWSET sont utilisés.

dbname

sysname, nullable

Nom de la base de données dans laquelle réside la table. Prend la valeur NULL lorsque OPENQUERY ou OPENROWSET sont utilisés.

Notes

La procédure sp_describe_cursor_tables décrit les tables de base qui sont référencées par un curseur de serveur. Utilisez sp_describe_cursor_columns pour obtenir la description des attributs du jeu de résultats retourné par le curseur. Utilisez la procédure sp_describe_cursor pour obtenir la description des caractéristiques globales du curseur, par exemple sa capacité à permettre le défilement et les mises à jour. Utilisez la procédure stockée sp_cursor_list pour obtenir un rapport sur les curseurs côté serveur Transact-SQL qui sont visibles à la connexion.

Autorisations

Nécessite d'être membre du rôle public.

Exemple

Cet exemple ouvre un curseur global et utilise sp_describe_cursor_tables pour fournir un rapport sur les tables qui sont référencées par le curseur.

USE AdventureWorks2008R2;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';

OPEN abc;
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR;

-- Execute sp_describe_cursor_tables into the cursor variable.
EXEC master.dbo.sp_describe_cursor_tables
      @cursor_return = @Report OUTPUT,
      @cursor_source = N'global', @cursor_identity = N'abc';

-- Fetch all the rows from the sp_describe_cursor_tables output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT from @Report;
END

-- Close and deallocate the cursor from sp_describe_cursor_tables.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO