Her er en artikel, der præsenterer tre måder til hurtigt at bestemme, hvor mange systemtabeller der er i den aktuelle database i SQL Server.
Alle tre muligheder bruger COUNT()
funktion, mens du forespørger på sys.objects
systemkatalogvisning. De resulterer alle i det samme output, så du behøver virkelig ikke at gå forbi den første mulighed. Men jeg vil liste dem alligevel.
Mulighed 1 – Efter type
Den mest kortfattede måde at gøre dette på er at filtrere efter type
kolonne.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Her filtrerer jeg efter en type
af S
. S
står for "System base table".
Hvis jeg skifter til master database, får jeg et andet resultat:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultat:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Dette skyldes, at mesteren databasen indeholder nogle systemtabeller, der ikke er i andre databaser.
Vi kan køre følgende forespørgsel for at få navnene:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Resultat:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
I dette tilfælde sammenligner jeg mesteren database til modellen database. Du kan udtrykkeligt angive en anden database ved at bytte model
med navnet på den anden database.
Mulighed 2 – Ved "Typebeskrivelse"
En anden mulighed er at filtrere efter type_desc
kolonne i stedet for type
kolonne.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Resultat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Mulighed 3 – Ved OBJECTPROPERTY()
Hvis du af en eller anden grund finder de to foregående muligheder uegnede, kan du prøve at bruge OBJECTPROPERTY()
fungere.
Denne funktion accepterer to argumenter:et objekt-id og en egenskab. Objekt-id'et kan være tabel-id'et, og egenskaben kan være IsSystemTable
, som bestemmer, om objektet er en systemtabel eller ej.
Derfor kunne du gøre noget som dette:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Resultat:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Læs tabellerne
Du kan ændre de tre muligheder, hvis du ønsker at liste tabellerne i stedet for blot at tælle dem. For at gøre dette skal du blot erstatte COUNT(*) AS [Number of User Tables]
med *
. Alternativt kan du udtrykkeligt navngive de kolonner, du ønsker returneret.
Tæl brugerdefinerede tabeller
Hvis du har brug for at finde ud af antallet af brugere tabeller, se 5 måder at tælle antallet af brugerdefinerede tabeller i SQL Server.