Tre delle visualizzazioni del catalogo di sistema in SQL Server includono sys.columns
, sys.system_columns
e sys.all_columns
.
Queste tre viste del catalogo forniscono ciascuna metadati sulle colonne nel database, ma c'è una differenza tra loro.
Ecco cosa fa ciascuno:
sys.columns
- Restituisce colonne da oggetti definiti dall'utente. Ciò include le colonne delle tabelle di base del sistema.
sys.system_columns
- Restituisce colonne da oggetti di sistema.
sys.all_columns
- Restituisce colonne da tutti gli oggetti definiti dall'utente e di sistema.
In altre parole, l'ultima vista combina i risultati delle due viste precedenti.
I seguenti tipi di oggetto possono avere colonne:
- Funzioni di assemblaggio con valori di tabella (FT)
- Funzioni SQL con valori di tabella in linea (IF)
- Tabelle interne (IT)
- Tabelle di sistema (S)
- Funzioni SQL con valori di tabella (TF)
- Tabelle utente (U)
- Viste (V)
Esempio
Ecco un esempio che dimostra la differenza nei risultati restituiti da queste visualizzazioni.
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;
Risultato:
+-----------+ | columns | |-----------| | 1025 | +-----------+ (1 row affected) +------------------+ | system_columns | |------------------| | 8982 | +------------------+ (1 row affected) +---------------+ | all_columns | |---------------| | 10007 | +---------------+ (1 row affected)
Se aggiungiamo insieme i risultati delle prime due query, otteniamo lo stesso risultato di sys.all_columns
:
USE Music; SELECT (SELECT COUNT(*) FROM sys.columns) + (SELECT COUNT(*) FROM sys.system_columns) AS Result;
Risultato:
+----------+ | Result | |----------| | 10007 | +----------+