Trzy widoki katalogu systemowego w SQL Server obejmują sys.columns
, sys.system_columns
i sys.all_columns
.
Każdy z tych trzech widoków katalogu zawiera metadane dotyczące kolumn w bazie danych, ale jest między nimi różnica.
Oto, co każdy z nich robi:
sys.columns
- Zwraca kolumny z obiektów zdefiniowanych przez użytkownika. Obejmuje to kolumny z tabel podstawowych systemu.
sys.system_columns
- Zwraca kolumny z obiektów systemowych.
sys.all_columns
- Zwraca kolumny ze wszystkich obiektów zdefiniowanych przez użytkownika i systemowych.
Innymi słowy, ostatni widok łączy wyniki dwóch poprzednich widoków.
Następujące typy obiektów mogą mieć kolumny:
- Funkcje asemblera o wartościach tabelarycznych (FT)
- Wbudowane funkcje SQL z wartościami tabelarycznymi (IF)
- Tabele wewnętrzne (IT)
- Tabele systemowe (S)
- Funkcje SQL o wartościach tabelarycznych (TF)
- Tabele użytkowników (U)
- Widoki (V)
Przykład
Oto przykład, który pokazuje różnicę w wynikach zwracanych przez te widoki.
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;
Wynik:
+-----------+ | columns | |-----------| | 1025 | +-----------+ (1 row affected) +------------------+ | system_columns | |------------------| | 8982 | +------------------+ (1 row affected) +---------------+ | all_columns | |---------------| | 10007 | +---------------+ (1 row affected)
Jeśli dodamy wyniki dwóch pierwszych zapytań razem, otrzymamy ten sam wynik, co sys.all_columns
:
USE Music; SELECT (SELECT COUNT(*) FROM sys.columns) + (SELECT COUNT(*) FROM sys.system_columns) AS Result;
Wynik:
+----------+ | Result | |----------| | 10007 | +----------+