Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Diferença entre sys.columns, sys.system_columns e sys.all_columns no SQL Server


Três das exibições do catálogo do sistema no SQL Server incluem sys.columns , sys.system_columns e sys.all_columns .

Cada uma dessas três visualizações de catálogo fornece metadados sobre colunas no banco de dados, mas há uma diferença entre elas.



Veja o que cada um faz:
sys.columns
Retorna colunas de objetos definidos pelo usuário. Isso inclui colunas das tabelas base do sistema.
sys.system_columns
Retorna colunas de objetos do sistema.
sys.all_columns
Retorna colunas de todos os objetos definidos pelo usuário e do sistema.

Em outras palavras, a última visualização combina os resultados das duas visualizações anteriores.

Os seguintes tipos de objeto podem ter colunas:
  • Funções de montagem com valor de tabela (FT)
  • Funções SQL com valor de tabela (IF) inline
  • Tabelas internas (TI)
  • Tabelas do sistema (S)
  • Funções SQL com valor de tabela (TF)
  • Tabelas de usuário (U)
  • Visualizações (V)

Exemplo


Aqui está um exemplo que demonstra a diferença nos resultados retornados por essas visualizações.
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;

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

Se somarmos os resultados das duas primeiras consultas, obteremos o mesmo resultado que sys.all_columns :
USE Music;

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

Resultado:
+----------+
| Result   |
|----------|
| 10007    |
+----------+