sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att räkna antalet systemtabeller i en SQL Server-databas

Här är en artikel som presenterar tre sätt att snabbt avgöra hur många systemtabeller som finns i den aktuella databasen i SQL Server.

Alla tre alternativen använder COUNT() funktion medan du frågar efter sys.objects systemkatalogvy. De resulterar alla i samma utdata, så du behöver verkligen inte gå förbi det första alternativet. Men jag listar dem ändå.

Alternativ 1 – Efter typ

Det mest kortfattade sättet att göra detta är att filtrera efter type kolumn.

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

Resultat:

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

Här filtrerar jag efter en type av S . S står för "Systembastabell".

Om jag byter till master databas får jag ett annat resultat:

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

Resultat:

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

Detta beror på att master databasen innehåller vissa systemtabeller som inte finns i andra databaser.

Vi kan köra följande fråga för att få namnen:

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 det här fallet jämför jag mästaren databas till modellen databas. Du kan uttryckligen ange en annan databas genom att byta model med namnet på den andra databasen.

Alternativ 2 – Efter "Typbeskrivning"

Ett annat alternativ är att filtrera efter type_desc kolumnen istället för type kolumn.

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

Resultat:

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

Alternativ 3 – Av OBJECTPROPERTY()

Om du av någon anledning tycker att de två föregående alternativen är olämpliga kan du prova att använda OBJECTPROPERTY() fungera.

Den här funktionen accepterar två argument:ett objekt-ID och en egenskap. Objekt-ID kan vara tabell-ID och egenskapen kan vara IsSystemTable , 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 System Tables]
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;

Resultat:

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

Lista tabellerna

Du kan ändra de tre alternativen om du vill lista tabellerna istället för att bara räkna dem. För att göra detta, ersätt bara COUNT(*) AS [Number of User Tables] med * . Alternativt kan du uttryckligen namnge de kolumner som du vill ha tillbaka.

Räkna användardefinierade tabeller

Om du behöver ta reda på antalet användare tabeller, se 5 sätt att räkna antalet användardefinierade tabeller i SQL Server.


  1. Oracles behållare för J2EE (OC4J) i R12

  2. Hur kan jag infoga kolumnkommentarer i PostgreSQL via Python?

  3. Hur inkluderar man det totala antalet returnerade rader i resultatuppsättningen från kommandot SELECT T-SQL?

  4. Överför Lista<> till SQL Stored Procedur