Drei der Systemkatalogansichten in SQL Server enthalten sys.columns
, sys.system_columns
und sys.all_columns
.
Diese drei Katalogansichten stellen jeweils Metadaten zu Spalten in der Datenbank bereit, aber es gibt einen Unterschied zwischen ihnen.
Hier ist, was jeder tut:
sys.columns
- Gibt Spalten von benutzerdefinierten Objekten zurück. Dazu gehören Spalten aus den Systembasistabellen.
sys.system_columns
- Gibt Spalten von Systemobjekten zurück.
sys.all_columns
- Gibt Spalten von allen benutzerdefinierten und Systemobjekten zurück.
Mit anderen Worten, die letzte Ansicht kombiniert die Ergebnisse der beiden vorherigen Ansichten.
Die folgenden Objekttypen können Spalten haben:
- Tabellenwertige Assemblerfunktionen (FT)
- Inline-Tabellenwert-SQL-Funktionen (IF)
- Interne Tabellen (IT)
- Systemtabellen (S)
- Tabellenwertige SQL-Funktionen (TF)
- Benutzertabellen (U)
- Ansichten (V)
Beispiel
Hier ist ein Beispiel, das den Unterschied in den Ergebnissen zeigt, die von diesen Ansichten zurückgegeben werden.
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;
Ergebnis:
+-----------+ | columns | |-----------| | 1025 | +-----------+ (1 row affected) +------------------+ | system_columns | |------------------| | 8982 | +------------------+ (1 row affected) +---------------+ | all_columns | |---------------| | 10007 | +---------------+ (1 row affected)
Wenn wir die Ergebnisse der ersten beiden Abfragen addieren, erhalten wir das gleiche Ergebnis wie sys.all_columns
:
USE Music; SELECT (SELECT COUNT(*) FROM sys.columns) + (SELECT COUNT(*) FROM sys.system_columns) AS Result;
Ergebnis:
+----------+ | Result | |----------| | 10007 | +----------+