Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer les informations de colonne pour une procédure stockée dans SQL Server :sp_sproc_columns

Dans SQL Server, les sp_sproc_columns procédure stockée système vous permet d'obtenir des informations de colonne pour une procédure stockée donnée ou une fonction définie par l'utilisateur dans le système actuel.

C'est l'équivalent de SQLProcedureColumns dans ODBC.

Syntaxe

La syntaxe ressemble à ceci :

sp_sproc_columns [[@procedure_name = ] 'name']   
    [ , [@procedure_owner = ] 'owner']   
    [ , [@procedure_qualifier = ] 'qualifier']   
    [ , [@column_name = ] 'column_name']  
    [ , [@ODBCVer = ] 'ODBCVer']  
    [ , [@fUsePattern = ] 'fUsePattern']

Tous les arguments sont facultatifs. Consultez la documentation de Microsoft pour une explication détaillée de ceux-ci.

Exemple 1 – Ne spécifiez aucun argument

Vous pouvez exécuter la procédure stockée sans fournir d'arguments. Comme ceci :

EXEC sp_sproc_columns

Ou même comme ça :

sp_sproc_columns

Cela renvoie toutes les procédures stockées et les fonctions définies par l'utilisateur dans la base de données actuelle. Lorsque je l'exécute sur l'exemple de base de données WideWorldImporters, j'obtiens 9077 lignes. Dans l'exemple suivant, je vais le réduire à un seul.

Exemple 2 - Spécifier tous les arguments

Voici à quoi cela ressemble si vous incluez tous les arguments.

EXEC sp_sproc_columns 
  @procedure_name = 'GetCityUpdates',
  @procedure_owner = 'Integration',
  @procedure_qualifier = 'WideWorldImporters',
  @column_name = '@RETURN_VALUE',
  @ODBCVer = 2,
  @fUsePattern = 1;

Résultat (en utilisant la sortie verticale) :

PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @RETURN_VALUE
COLUMN_TYPE         | 5
DATA_TYPE           | 4
TYPE_NAME           | int
PRECISION           | 10
LENGTH              | 4
SCALE               | 0
RADIX               | 10
NULLABLE            | 0
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | 4
SQL_DATETIME_SUB    | NULL
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 0
IS_NULLABLE         | NO
SS_DATA_TYPE        | 56

Dans ce cas, je renvoie des informations sur la valeur de retour de GetCityUpdates procédure stockée.

Exemple 3 - Spécifiez uniquement la procédure stockée (ou la fonction)

Plutôt que d'inclure tous les arguments, vous pouvez inclure uniquement le nom de la procédure stockée. Cependant, si vous ne spécifiez pas le @column_name , cela renverra une ligne pour chaque colonne.

De plus, vous pouvez rendre votre code plus concis en omettant le nom de l'argument (c'est-à-dire en n'incluant que sa valeur).

EXEC sp_sproc_columns GetCityUpdates;

Résultat (en utilisant la sortie verticale) :

-[ RECORD 1 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @RETURN_VALUE
COLUMN_TYPE         | 5
DATA_TYPE           | 4
TYPE_NAME           | int
PRECISION           | 10
LENGTH              | 4
SCALE               | 0
RADIX               | 10
NULLABLE            | 0
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | 4
SQL_DATETIME_SUB    | NULL
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 0
IS_NULLABLE         | NO
SS_DATA_TYPE        | 56
-[ RECORD 2 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @LastCutoff
COLUMN_TYPE         | 1
DATA_TYPE           | -9
TYPE_NAME           | datetime2
PRECISION           | 27
LENGTH              | 54
SCALE               | 7
RADIX               | NULL
NULLABLE            | 1
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | -9
SQL_DATETIME_SUB    | 3
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 1
IS_NULLABLE         | YES
SS_DATA_TYPE        | 0
-[ RECORD 3 ]-------------------------
PROCEDURE_QUALIFIER | WideWorldImporters
PROCEDURE_OWNER     | Integration
PROCEDURE_NAME      | GetCityUpdates;1
COLUMN_NAME         | @NewCutoff
COLUMN_TYPE         | 1
DATA_TYPE           | -9
TYPE_NAME           | datetime2
PRECISION           | 27
LENGTH              | 54
SCALE               | 7
RADIX               | NULL
NULLABLE            | 1
REMARKS             | NULL
COLUMN_DEF          | NULL
SQL_DATA_TYPE       | -9
SQL_DATETIME_SUB    | 3
CHAR_OCTET_LENGTH   | NULL
ORDINAL_POSITION    | 2
IS_NULLABLE         | YES
SS_DATA_TYPE        | 0

Exemple 4 - Autres variantes

Vous pouvez fournir n'importe quelle variante d'arguments pour renvoyer uniquement les informations dont vous avez besoin.

Par exemple, vous pouvez renvoyer toutes les informations d'un propriétaire de procédure particulier :

EXEC sp_sproc_columns @procedure_owner = 'Integration'

Ou vous pouvez obtenir des informations sur toutes les valeurs de retour de toutes les procédures et fonctions définies par l'utilisateur :

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Bien sûr, vous pouvez toujours inclure le qualificatif de procédure si vous le souhaitez. Dans SQL Server, ce paramètre représente le nom de la base de données. Dans certains produits, il représente le nom du serveur de l'environnement de base de données de la table.

EXEC sp_sproc_columns 
  @column_name = '@RETURN_VALUE',
  @procedure_qualifier = 'WideWorldImporters';

Exemple 5 – Caractères génériques

Le @fUsePattern L'argument vous permet de spécifier si le trait de soulignement (_ ), pourcentage (% ) et parenthèse ([ ] ) sont interprétés comme des caractères génériques.

Par exemple, l'exécution du code suivant renverra toutes les procédures et fonctions définies par l'utilisateur qui commencent par Get .

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 1;

Donc, dans mon cas, cela a renvoyé des procédures telles que GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, etc.

Si je désactive les caractères génériques :

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 0;

Je n'obtiens aucun résultat.