sql >> Base de Datos >  >> RDS >> Sqlserver

Diferencia entre sys.columns, sys.system_columns y sys.all_columns en SQL Server

Tres de las vistas del catálogo del sistema en SQL Server incluyen sys.columns , sys.system_columns y sys.all_columns .

Cada una de estas tres vistas de catálogo proporciona metadatos sobre las columnas de la base de datos, pero hay una diferencia entre ellas.

Esto es lo que hace cada uno:

sys.columns
Devuelve columnas de objetos definidos por el usuario. Esto incluye columnas de las tablas base del sistema.
sys.system_columns
Devuelve columnas de objetos del sistema.
sys.all_columns
Devuelve columnas de todos los objetos del sistema y definidos por el usuario.

En otras palabras, la última vista combina los resultados de las dos vistas anteriores.

Los siguientes tipos de objetos pueden tener columnas:

  • Funciones de ensamblaje con valores de tabla (FT)
  • Funciones SQL con valores de tabla (IF) en línea
  • Tablas internas (TI)
  • Tablas del sistema (S)
  • Funciones SQL con valores de tabla (TF)
  • Tablas de usuarios (U)
  • Vistas (V)

Ejemplo

Este es un ejemplo que demuestra la diferencia en los resultados devueltos por estas vistas.

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)

Si sumamos los resultados de las dos primeras consultas, obtenemos el mismo resultado que sys.all_columns :

USE Music;

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

Resultado:

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