Nedan finns fem metoder som du kan använda för att snabbt avgöra hur många användardefinierade tabeller som finns i den aktuella databasen i SQL Server.
Alla fem alternativen använder COUNT()
funktion för att få räkningen. Självklart kan du ersätta detta med en asterisk (*
), eller namnen på kolumnerna för att returnera en lista över alla användardefinierade tabeller.
Alternativ 1 – sys.tables
Det mest uppenbara sättet att göra detta är att fråga sys.tables
systemkatalogvy. Hela syftet med den här vyn är att returnera en rad för varje användartabell, så det är precis vad vi behöver.
USE WideWorldImportersDW; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 29 | +-------------------------+
I det här fallet returnerar jag antalet användartabeller från WideWorldImportersDW
databas.
Om jag byter till en annan databas får jag ett annat resultat:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Som nämnts kan du lista ut tabellerna helt enkelt genom att ersätta COUNT(*)
rad med en asterisk (*
) eller namnen på kolumnerna:
USE Music; SELECT name FROM sys.tables;
Resultat:
+---------+ | name | |---------| | Artists | | Genres | | Albums | | Country | +---------+
Alternativ 2 – Filtrera sys.objects efter typ
Ett annat alternativ är att fråga sys.objects
katalogvy.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type = 'U';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
I det här fallet måste du filtrera efter type = 'U'
(U
är för "Användartabell").
Alternativ 3 – Filtrera sys.objects efter "Typbeskrivning"
Ett annat sätt att fråga efter sys.objects
är att filtrera resultaten efter type_desc
kolumn.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type_desc = 'USER_TABLE';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Alternativ 4 – Filtrera sys.objects genom att använda funktionen OBJECTPROPERTY()
Du kan också använda OBJECTPROPERTY()
funktion i din WHERE
klausul.
Den här funktionen accepterar två argument:ett objekt-ID och en egenskap. Objekt-ID kan vara tabell-ID och egenskapen kan vara IsUserTable
, som avgör om objektet är en systemtabell eller inte.
Därför kan du göra något så här:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Alternativ 5 – INFORMATION_SCHEMA.TABLES
Det här alternativet frågar efter INFORMATION_SCHEMA.TABLES
informationsschemavy. Den här vyn returnerar både vyer och tabeller, så du måste filtrera efter TABLE_TYPE = 'BASE TABLE'
att returnera bara tabeller.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
Resultat:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Om du behöver ta reda på antalet systemtabeller, se 3 sätt att räkna antalet systemtabeller i SQL Server.