Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

3 Möglichkeiten, die Anzahl der Systemtabellen in einer SQL Server-Datenbank zu zählen

In diesem Artikel werden drei Möglichkeiten vorgestellt, wie Sie schnell feststellen können, wie viele Systemtabellen sich in der aktuellen Datenbank in SQL Server befinden.

Alle drei Optionen verwenden den COUNT() Funktion beim Abfragen der sys.objects Systemkatalogansicht. Sie alle führen zu derselben Ausgabe, sodass Sie wirklich nicht über die erste Option hinausgehen müssen. Aber ich werde sie trotzdem auflisten.

Option 1 – Nach Typ

Der einfachste Weg, dies zu tun, ist das Filtern nach type Spalte.

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type = 'S';

Ergebnis:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Hier filtere ich nach einem type von S . Das S steht für „Systembasistabelle“.

Wenn ich zum Master wechsle Datenbank erhalte ich ein anderes Ergebnis:

USE Master;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type = 'S';

Ergebnis:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 79                        |
+---------------------------+

Denn der Master Die Datenbank enthält einige Systemtabellen, die sich nicht in anderen Datenbanken befinden.

Wir können die folgende Abfrage ausführen, um die Namen zu erhalten:

USE master;
SELECT name 
FROM sys.objects
WHERE type = 'S' 
AND name NOT IN (
  SELECT name FROM model.sys.objects WHERE type = 'S' 
);

Ergebnis:

+--------------------------+
| name                     |
|--------------------------|
| sysextendedrecoveryforks |
| syslogshippers           |
| sysmatrixageforget       |
| sysmatrixages            |
| sysmatrixbricks          |
| sysmatrixconfig          |
| sysmatrixmanagers        |
+--------------------------+

In diesem Fall vergleiche ich den Master Datenbank zum Modell Datenbank. Sie können explizit eine andere Datenbank angeben, indem Sie model austauschen mit dem Namen der anderen Datenbank.

Option 2 – Nach „Typbeschreibung“

Eine weitere Option ist das Filtern nach type_desc Spalte anstelle des type Spalte.

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type_desc = 'SYSTEM_TABLE';

Ergebnis:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Option 3 – Durch OBJECTPROPERTY()

Wenn Sie die beiden vorherigen Optionen aus irgendeinem Grund ungeeignet finden, können Sie es mit OBJECTPROPERTY() versuchen Funktion.

Diese Funktion akzeptiert zwei Argumente:eine Objekt-ID und eine Eigenschaft. Die Objekt-ID kann die Tabellen-ID sein und die Eigenschaft kann IsSystemTable sein , die bestimmt, ob das Objekt eine Systemtabelle ist oder nicht.

Daher könnten Sie etwa so vorgehen:

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;

Ergebnis:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Listen Sie die Tabellen auf

Sie können die drei Optionen ändern, wenn Sie die Tabellen auflisten möchten, anstatt sie nur zu zählen. Ersetzen Sie dazu einfach COUNT(*) AS [Number of User Tables] mit * . Alternativ können Sie die zurückzugebenden Spalten explizit benennen.

Benutzerdefinierte Tabellen zählen

Wenn Sie die Anzahl der Benutzer herausfinden müssen Tabellen finden Sie unter 5 Methoden zum Zählen der Anzahl benutzerdefinierter Tabellen in SQL Server.