sql >> Database >  >> RDS >> Sqlserver

3 manieren om het aantal systeemtabellen in een SQL Server-database te tellen

Hier is een artikel dat drie manieren presenteert om snel te bepalen hoeveel systeemtabellen zich in de huidige database in SQL Server bevinden.

Alle drie de opties gebruiken de COUNT() functie tijdens het opvragen van de sys.objects systeemcatalogus bekijken. Ze resulteren allemaal in dezelfde uitvoer, dus u hoeft echt niet verder te gaan dan de eerste optie. Maar ik zal ze toch opsommen.

Optie 1 – Op type

De meest beknopte manier om dit te doen is filteren op het type kolom.

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

Resultaat:

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

Hier filter ik op een type van S . De S staat voor "System base table".

Als ik overschakel naar de master database, krijg ik een ander resultaat:

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

Resultaat:

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

Dit komt omdat de meester database bevat enkele systeemtabellen die zich niet in andere databases bevinden.

We kunnen de volgende query uitvoeren om de namen te krijgen:

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

Resultaat:

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

In dit geval vergelijk ik de master database naar het model databank. U kunt expliciet een andere database specificeren door model om te wisselen met de naam van de andere database.

Optie 2 – Op “Typebeschrijving”

Een andere optie is om te filteren op de type_desc kolom in plaats van het type kolom.

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

Resultaat:

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

Optie 3 – Door OBJECTPROPERTY()

Als u om de een of andere reden de vorige twee opties niet geschikt vindt, kunt u proberen de OBJECTPROPERTY() te gebruiken functie.

Deze functie accepteert twee argumenten:een object-ID en een eigenschap. De object-ID kan de tabel-ID zijn en de eigenschap kan IsSystemTable zijn , die bepaalt of het object al dan niet een systeemtabel is.

Daarom zou je zoiets als dit kunnen doen:

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

Resultaat:

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

Laat de tabellen zien

U kunt de drie opties wijzigen als u de tabellen wilt weergeven in plaats van ze alleen te tellen. Om dit te doen, vervangt u eenvoudig de COUNT(*) AS [Number of User Tables] met * . Als alternatief kunt u de kolommen die u wilt retourneren expliciet een naam geven.

Tel door gebruiker gedefinieerde tabellen

Als u het aantal gebruikers wilt weten tabellen, zie 5 manieren om het aantal door de gebruiker gedefinieerde tabellen in SQL Server te tellen.


  1. Bouw een nieuwsbriefsysteem met PHP en MySQL

  2. mysql:waarom geeft het vergelijken van een 'string' met 0 waar?

  3. Een sorteervolgordekolom gebruiken in een databasetabel

  4. Ruby on Rails 3 Kan geen verbinding maken met lokale MySQL-server via socket '/tmp/mysql.sock' op OSX