sql >> Databasteknik >  >> RDS >> Sqlserver

5 sätt att räkna antalet användardefinierade tabeller i en SQL Server-databas

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.


  1. Installera Oracle Database 12c-programvaran på Windows

  2. Hash-anslutningar på nullbara kolumner

  3. Jämförelse av databas med hög tillgänglighet - MySQL / MariaDB-replikering vs Oracle Data Guard

  4. Exempel på PHP + MySQL-transaktioner