Tre av systemkatalogvyerna i SQL Server inkluderar sys.columns
, sys.system_columns
och sys.all_columns
.
Dessa tre katalogvyer ger var och en metadata om kolumner i databasen, men det finns en skillnad mellan dem.
Så här gör var och en:
sys.columns
- Returnerar kolumner från användardefinierade objekt. Detta inkluderar kolumner från systemets bastabeller.
sys.system_columns
- Returnerar kolumner från systemobjekt.
sys.all_columns
- Returnerar kolumner från alla användardefinierade objekt och systemobjekt.
Med andra ord, den sista vyn kombinerar resultaten från de två föregående vyerna.
Följande objekttyper kan ha kolumner:
- Table-valued assembly functions (FT)
- Inline tabellvärdade SQL-funktioner (IF)
- Interna tabeller (IT)
- Systemtabeller (S)
- Tabell-värderade SQL-funktioner (TF)
- Användartabeller (U)
- Visningar (V)
Exempel
Här är ett exempel som visar skillnaden i resultat som returneras av dessa vyer.
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;
Resultat:
+-----------+ | columns | |-----------| | 1025 | +-----------+ (1 row affected) +------------------+ | system_columns | |------------------| | 8982 | +------------------+ (1 row affected) +---------------+ | all_columns | |---------------| | 10007 | +---------------+ (1 row affected)
Om vi lägger ihop resultaten av de två första frågorna får vi samma resultat som sys.all_columns
:
USE Music; SELECT (SELECT COUNT(*) FROM sys.columns) + (SELECT COUNT(*) FROM sys.system_columns) AS Result;
Resultat:
+----------+ | Result | |----------| | 10007 | +----------+