Drie van de systeemcatalogusweergaven in SQL Server bevatten sys.columns
, sys.system_columns
, en sys.all_columns
.
Deze drie catalogusweergaven bieden elk metadata over kolommen in de database, maar er is een verschil tussen beide.
Dit is wat ze allemaal doen:
sys.columns
- Retourneert kolommen van door de gebruiker gedefinieerde objecten. Dit omvat kolommen uit de systeembasistabellen.
sys.system_columns
- Retourneert kolommen van systeemobjecten.
sys.all_columns
- Retourneert kolommen van alle door de gebruiker gedefinieerde en systeemobjecten.
Met andere woorden, de laatste weergave combineert de resultaten van de vorige twee weergaven.
De volgende objecttypen kunnen kolommen hebben:
- Tafelwaardige assemblagefuncties (FT)
- Inline tabelwaarde SQL-functies (IF)
- Interne tabellen (IT)
- Systeemtabellen (S)
- SQL-functies met tabelwaarde (TF)
- Gebruikerstabellen (U)
- Beelden (V)
Voorbeeld
Hier is een voorbeeld dat het verschil in resultaten van deze weergaven laat zien.
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;
Resultaat:
+-----------+ | columns | |-----------| | 1025 | +-----------+ (1 row affected) +------------------+ | system_columns | |------------------| | 8982 | +------------------+ (1 row affected) +---------------+ | all_columns | |---------------| | 10007 | +---------------+ (1 row affected)
Als we de resultaten van de eerste twee zoekopdrachten bij elkaar optellen, krijgen we hetzelfde resultaat als sys.all_columns
:
USE Music; SELECT (SELECT COUNT(*) FROM sys.columns) + (SELECT COUNT(*) FROM sys.system_columns) AS Result;
Resultaat:
+----------+ | Result | |----------| | 10007 | +----------+