Jeśli używałeś T-SQL przez jakiś czas, prawdopodobnie napotkałeś sys.objects widok katalogu systemowego, który zwraca zdefiniowane przez użytkownika obiekty o zakresie schematu w bazie danych.
Ale istnieją dwa inne podobne poglądy, o których możesz być świadomy lub nie; sys.system_objects i sys.all_objects .
Chociaż są podobne, ich różnice są wyraźne, a nazwy mówią różnicę. Oto oficjalna definicja wszystkich trzech widoków:
sys.objects- Zawiera wiersz dla każdego zdefiniowanego przez użytkownika obiektu o zakresie schematu, który jest tworzony w bazie danych.
sys.system_objects- Zawiera jeden wiersz dla wszystkich obiektów systemowych o zakresie schematu, które są zawarte w SQL Server.
sys.all_objects- Pokazuje
UNIONwszystkich zdefiniowanych przez użytkownika obiektów i obiektów systemowych w zakresie schematu.
Innymi słowy, ostatni widok łączy wyniki dwóch poprzednich widoków (zwraca zarówno systemowe i obiekty zdefiniowane przez użytkownika).
Przykład
Oto przykład, który pokazuje różnicę w wynikach zwracanych przez te widoki.
USE WideWorldImportersDW; SELECT COUNT(*) AS [sys.objects] FROM sys.objects; SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects; SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects; SELECT (SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects) - (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.all_objects MINUS sys.system_objects];
Wynik:
+---------------+ | sys.objects | |---------------| | 224 | +---------------+ (1 row affected) +----------------------+ | sys.system_objects | |----------------------| | 2205 | +----------------------+ (1 row affected) +-------------------+ | sys.all_objects | |-------------------| | 2429 | +-------------------+ (1 row affected)
Te widoki zwracają zbyt wiele wierszy, abym mógł je tutaj wymienić, więc używam COUNT() aby zwrócić liczbę wierszy, które każdy z nich zwraca.
Jeśli jesteś dobry z matematyki, szybko zobaczysz, że liczba sys.all_objects jest sumą sys.objects i sys.system_objects .
Oto zapytanie, które dodaje ten dodatek.
SELECT (SELECT COUNT(*) AS [sys.objects] FROM sys.objects) + (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.objects PLUS sys.system_objects];
Wynik:
+---------------------------------------+ | sys.objects PLUS sys.system_objects | |---------------------------------------| | 2429 | +---------------------------------------+
Zwróć uwagę, że widoczność metadanych w widokach katalogu jest ograniczona do zabezpieczeń, których użytkownik jest właścicielem lub do których użytkownik otrzymał pewne uprawnienia.