Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterschied zwischen sys.columns, sys.system_columns und sys.all_columns in SQL Server

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