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

Différence entre sys.columns, sys.system_columns et sys.all_columns dans SQL Server

Trois des vues de catalogue système dans SQL Server incluent sys.columns , sys.system_columns , et sys.all_columns .

Ces trois vues de catalogue fournissent chacune des métadonnées sur les colonnes de la base de données, mais il existe une différence entre elles.

Voici ce que chacun fait :

sys.columns
Renvoie des colonnes à partir d'objets définis par l'utilisateur. Cela inclut les colonnes des tables de base du système.
sys.system_columns
Renvoie les colonnes des objets système.
sys.all_columns
Renvoie les colonnes de tous les objets système et définis par l'utilisateur.

En d'autres termes, la dernière vue combine les résultats des deux vues précédentes.

Les types d'objets suivants peuvent avoir des colonnes :

  • Fonctions d'assemblage de table (FT)
  • Fonctions SQL de table en ligne (IF)
  • Tableaux internes (IT)
  • Tables système (S)
  • Fonctions SQL table (TF)
  • Tableaux utilisateur (U)
  • Vues (V)

Exemple

Voici un exemple qui illustre la différence dans les résultats renvoyés par ces vues.

USE Music;

SELECT COUNT(*) AS columns
FROM sys.columns;

SELECT COUNT(*) AS system_columns
FROM sys.system_columns;

SELECT COUNT(*) AS all_columns
FROM sys.all_columns;

Résultat :

+-----------+
| columns   |
|-----------|
| 1025      |
+-----------+
(1 row affected)
+------------------+
| system_columns   |
|------------------|
| 8982             |
+------------------+
(1 row affected)
+---------------+
| all_columns   |
|---------------|
| 10007         |
+---------------+
(1 row affected)

Si nous additionnons les résultats des deux premières requêtes ensemble, nous obtenons le même résultat que sys.all_columns :

USE Music;

SELECT 
(SELECT COUNT(*) FROM sys.columns) +
(SELECT COUNT(*) FROM sys.system_columns)
AS Result;

Résultat :

+----------+
| Result   |
|----------|
| 10007    |
+----------+