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