Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Differenza tra sys.columns, sys.system_columns e sys.all_columns in SQL Server

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    |
+----------+