Zde je článek, který představuje tři způsoby, jak rychle zjistit, kolik systémových tabulek je v aktuální databázi na serveru SQL Server.
Všechny tři možnosti používají COUNT()
při dotazování na sys.objects
zobrazení katalogu systému. Všechny vedou ke stejnému výstupu, takže opravdu nemusíte přecházet přes první možnost. Ale stejně je uvedu.
Možnost 1 – Podle typu
Nejstručnější způsob, jak toho dosáhnout, je filtrovat podle type
sloupec.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Výsledek:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Zde filtruji podle type
z S
. S
znamená „Základní tabulka systému“.
Pokud přepnu na master databáze, dostanu jiný výsledek:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Výsledek:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Je to proto, že mistr databáze obsahuje některé systémové tabulky, které nejsou v jiných databázích.
Pro získání jmen můžeme spustit následující dotaz:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Výsledek:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
V tomto případě porovnávám master databáze na model databáze. Můžete explicitně určit jinou databázi výměnou model
se jménem druhé databáze.
Možnost 2 – Podle „Popisu typu“
Další možností je filtrování podle type_desc
namísto type
sloupec.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Výsledek:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Možnost 3 – Podle OBJECTPROPERTY()
Pokud z nějakého důvodu považujete předchozí dvě možnosti za nevhodné, můžete zkusit použít OBJECTPROPERTY()
funkce.
Tato funkce přijímá dva argumenty:ID objektu a vlastnost. ID objektu může být ID tabulky a vlastnost může být IsSystemTable
, která určuje, zda je objekt systémovou tabulkou.
Proto můžete udělat něco takového:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Výsledek:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Seznam tabulek
Tyto tři možnosti můžete upravit, pokud chcete tabulky vypsat místo pouhého počítání. Chcete-li to provést, jednoduše nahraďte COUNT(*) AS [Number of User Tables]
s *
. Případně můžete explicitně pojmenovat sloupce, které chcete vrátit.
Počítání uživatelsky definovaných tabulek
Pokud potřebujete zjistit počet uživatelů tabulky, viz 5 způsobů, jak spočítat počet uživatelsky definovaných tabulek na serveru SQL.