Nedenfor er fem metoder, du kan bruge til hurtigt at bestemme, hvor mange brugerdefinerede tabeller der er i den aktuelle database i SQL Server.
Alle fem muligheder bruger COUNT()
funktion for at få optællingen. Selvfølgelig kan du erstatte dette med en stjerne (*
), eller navnene på kolonnerne for at returnere en liste over alle brugerdefinerede tabeller.
Mulighed 1 – sys.tables
Den mest oplagte måde at gøre dette på er at forespørge sys.tables
systemkatalogvisning. Hele formålet med denne visning er at returnere en række for hver brugertabel, så det er præcis, hvad vi har brug for.
USE WideWorldImportersDW; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 29 | +-------------------------+
I dette tilfælde returnerer jeg antallet af brugertabeller fra WideWorldImportersDW
database.
Hvis jeg skifter til en anden database, får jeg et andet resultat:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Som nævnt kan du liste tabellerne ud ved blot at erstatte COUNT(*)
linje med en stjerne (*
) eller navnene på kolonnerne:
USE Music; SELECT name FROM sys.tables;
Resultat:
+---------+ | name | |---------| | Artists | | Genres | | Albums | | Country | +---------+
Mulighed 2 – Filtrer sys.objects efter type
En anden mulighed er at forespørge sys.objects
katalogvisning.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type = 'U';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
I dette tilfælde skal du filtrere efter type = 'U'
(U
er for "Brugertabel").
Mulighed 3 – Filtrer sys.objects efter "Typebeskrivelse"
En anden måde at forespørge på sys.objects
view er at filtrere resultaterne efter type_desc
kolonne.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type_desc = 'USER_TABLE';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Mulighed 4 – Filtrer sys.objects ved at bruge funktionen OBJECTPROPERTY()
Du kan også bruge OBJECTPROPERTY()
funktion i din WHERE
klausul.
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 IsUserTable
, som bestemmer, om objektet er en systemtabel eller ej.
Derfor kunne du gøre noget som dette:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Mulighed 5 – INFORMATION_SCHEMA.TABLER
Denne mulighed forespørger INFORMATION_SCHEMA.TABLES
informationsskemavisning. Denne visning returnerer både visninger og tabeller, så du skal filtrere efter TABLE_TYPE = 'BASE TABLE'
at returnere kun borde.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Hvis du har brug for at finde ud af antallet af systemtabeller, se 3 måder at tælle antallet af systemtabeller på i SQL Server.