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

Utilisez COLUMNPROPERTY() pour renvoyer des informations de colonne ou de paramètre dans SQL Server

Dans SQL Server, le COLUMNPROPERTY() la fonction renvoie des informations sur la colonne ou le paramètre.

Par exemple, vous pouvez l'utiliser pour renvoyer des informations sur une colonne dans une table, un paramètre pour une procédure stockée, etc

Il accepte trois arguments :l'ID de la table ou de la procédure, la colonne ou le paramètre applicable et la propriété sur laquelle vous souhaitez obtenir des informations.

Syntaxe

La syntaxe ressemble à ceci :

COLUMNPROPERTY ( id , column , property )

Exemple 1 – Interroger une table

Dans cet exemple, j'obtiens des informations sur une colonne dans une table.

USE Music;
SELECT 
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ArtistId', 'AllowsNull') AS [Result];

Résultat :

+----------+
| Result   |
|----------|
| 0        |
+----------+

Dans ce cas, la colonne ArtistId n'autorise pas les valeurs NULL.

Passons à une autre colonne :

SELECT 
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'AllowsNull') AS [ActiveFrom],
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'Precision') AS [Precision],
  COLUMNPROPERTY(OBJECT_ID('Artists'), 'ActiveFrom', 'Scale') AS [Scale];

Résultat :

+--------------+-------------+---------+
| ActiveFrom   | Precision   | Scale   |
|--------------+-------------+---------|
| 1            | 10          | 0       |
+--------------+-------------+---------+

Dans ce cas, la colonne ActiveFrom autorise les valeurs NULL. Il a également une précision de 10 et une échelle de 0.

Vous remarquerez que j'utilise le OBJECT_ID() fonction pour renvoyer l'ID de la table. Sans cette fonction, j'aurais besoin de connaître l'ID (ou j'aurais besoin de faire une autre requête juste pour obtenir l'ID).

Voici ce que OBJECT_ID() renvoie dans l'exemple ci-dessus :

SELECT OBJECT_ID('Artists') AS Result;

Résultat :

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Maintenant que nous connaissons l'ID, nous pouvons le transmettre à COLUMNPROPERTY() fonction à la place :

SELECT 
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'AllowsNull') AS [ActiveFrom],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Precision') AS [Precision],
  COLUMNPROPERTY(885578193, 'ActiveFrom', 'Scale') AS [Scale];

Résultat :

+--------------+-------------+---------+
| ActiveFrom   | Precision   | Scale   |
|--------------+-------------+---------|
| 1            | 10          | 0       |
+--------------+-------------+---------+

Exemple 2 – Interroger une procédure

Dans cet exemple, j'obtiens des informations sur un paramètre d'une procédure stockée.

USE Music;
SELECT 
  COLUMNPROPERTY(
      OBJECT_ID('dbo.uspGetAlbumsByArtist'), 
      '@ArtistId', 
      'IsOutParam') AS [Result];

Résultat :

+----------+
| Result   |
|----------|
| 0        |
+----------+

C'est donc exactement la même syntaxe. Dans ce cas, le paramètre @ArtistId n'est pas un paramètre de sortie.

Liste complète des options

Voici une liste complète des arguments que vous pouvez passer à COLUMNPROPERTY() au moment de la rédaction :

  • AutoriseNull
  • ID de colonne
  • FullTextTypeColumn
  • GeneratedAlwaysType
  • IsColumnSet
  • IsComputed
  • IsCursorType
  • Est déterministe
  • IsFulltextIndexed
  • Est masqué
  • EstIdentité
  • IsIdNotForRepl
  • Est indexable
  • IsOutParam
  • Est précis
  • IsRowGuidCol
  • IsSparse
  • IsSystemVerified
  • EstXmlIndexable
  • Précision
  • Échelle
  • Sémantique statistique
  • Accès aux données système
  • Accès aux données utilisateur
  • Utilise AnsiTrim

Consultez la documentation Microsoft pour une explication détaillée de chaque propriété.

Voir aussi OBJECTPROPERTYEX() pour une fonction similaire qui renvoie des informations sur les objets de portée schéma plutôt que sur les bases de données, et DATABASEPROPERTYEX() qui renvoie des informations de propriété pour les bases de données.