Als u T-SQL al een tijdje gebruikt, bent u waarschijnlijk de sys.objects
tegengekomen systeemcatalogusweergave, die door de gebruiker gedefinieerde, schemagerichte objecten in de database retourneert.
Maar er zijn twee andere soortgelijke opvattingen waarvan u zich misschien wel of niet bewust bent; sys.system_objects
en sys.all_objects
.
Hoewel ze vergelijkbaar zijn, zijn hun verschillen duidelijk, en de namen vertellen het verschil. Hier is de officiële definitie van alle drie de weergaven:
sys.objects
- Bevat een rij voor elk door de gebruiker gedefinieerd object met schemabereik dat in een database wordt gemaakt.
sys.system_objects
- Bevat één rij voor alle systeemobjecten met schemabereik die zijn opgenomen in SQL Server.
sys.all_objects
- Toont de
UNION
van alle door de gebruiker gedefinieerde objecten en systeemobjecten met schemabereik.
Met andere woorden, de laatste weergave combineert de resultaten van de vorige twee weergaven (het retourneert zowel systeem en door de gebruiker gedefinieerde objecten).
Voorbeeld
Hier is een voorbeeld dat het verschil in resultaten van deze weergaven laat zien.
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];
Resultaat:
+---------------+ | sys.objects | |---------------| | 224 | +---------------+ (1 row affected) +----------------------+ | sys.system_objects | |----------------------| | 2205 | +----------------------+ (1 row affected) +-------------------+ | sys.all_objects | |-------------------| | 2429 | +-------------------+ (1 row affected)
Deze weergaven retourneren te veel rijen voor mij om ze hier op te sommen, dus ik gebruik COUNT()
om het aantal rijen te retourneren dat elke rij retourneert.
Als je goed bent in wiskunde, zul je snel zien dat het aantal sys.all_objects
is de som van sys.objects
en sys.system_objects
.
Hier is een zoekopdracht die die toevoeging doet.
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];
Resultaat:
+---------------------------------------+ | sys.objects PLUS sys.system_objects | |---------------------------------------| | 2429 | +---------------------------------------+
Houd er rekening mee dat de zichtbaarheid van de metadata in catalogusweergaven beperkt is tot beveiligbare bestanden die een gebruiker bezit of waarvoor de gebruiker enige toestemming heeft gekregen.