sql >> Database teknologi >  >> RDS >> Sqlserver

3 måder at tælle antallet af systemtabeller i en SQL Server-database

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.


  1. Java Crosstab - forberedt erklæringsforespørgsel

  2. Valg og konfiguration af hardware til SQL Server 2016 Standard Edition

  3. Rammen for et Apache Spark Job Run!

  4. Adminer – Et avanceret webbaseret databaseadministrationsværktøj til Linux