sql >> Databáze >  >> RDS >> Sqlserver

3 způsoby, jak spočítat počet systémových tabulek v databázi SQL Server

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.


  1. Postgres:INSERT, pokud ještě neexistuje

  2. Klauzule OUTPUT v MySQL

  3. Pomocí FILE_NAME() vrátíte název logického souboru pro dané ID souboru na serveru SQL Server

  4. Změny rozhraní Oracle