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.