Hier is een artikel dat drie manieren presenteert om snel te bepalen hoeveel systeemtabellen zich in de huidige database in SQL Server bevinden.
Alle drie de opties gebruiken de COUNT()
functie tijdens het opvragen van de sys.objects
systeemcatalogus bekijken. Ze resulteren allemaal in dezelfde uitvoer, dus u hoeft echt niet verder te gaan dan de eerste optie. Maar ik zal ze toch opsommen.
Optie 1 – Op type
De meest beknopte manier om dit te doen is filteren op het type
kolom.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultaat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Hier filter ik op een type
van S
. De S
staat voor "System base table".
Als ik overschakel naar de master database, krijg ik een ander resultaat:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultaat:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Dit komt omdat de meester database bevat enkele systeemtabellen die zich niet in andere databases bevinden.
We kunnen de volgende query uitvoeren om de namen te krijgen:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Resultaat:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
In dit geval vergelijk ik de master database naar het model databank. U kunt expliciet een andere database specificeren door model
om te wisselen met de naam van de andere database.
Optie 2 – Op “Typebeschrijving”
Een andere optie is om te filteren op de type_desc
kolom in plaats van het type
kolom.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Resultaat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Optie 3 – Door OBJECTPROPERTY()
Als u om de een of andere reden de vorige twee opties niet geschikt vindt, kunt u proberen de OBJECTPROPERTY()
te gebruiken functie.
Deze functie accepteert twee argumenten:een object-ID en een eigenschap. De object-ID kan de tabel-ID zijn en de eigenschap kan IsSystemTable
zijn , die bepaalt of het object al dan niet een systeemtabel is.
Daarom zou je zoiets als dit kunnen doen:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Resultaat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Laat de tabellen zien
U kunt de drie opties wijzigen als u de tabellen wilt weergeven in plaats van ze alleen te tellen. Om dit te doen, vervangt u eenvoudig de COUNT(*) AS [Number of User Tables]
met *
. Als alternatief kunt u de kolommen die u wilt retourneren expliciet een naam geven.
Tel door gebruiker gedefinieerde tabellen
Als u het aantal gebruikers wilt weten tabellen, zie 5 manieren om het aantal door de gebruiker gedefinieerde tabellen in SQL Server te tellen.