Oto artykuł, który przedstawia trzy sposoby szybkiego określenia, ile tabel systemowych znajduje się w bieżącej bazie danych w SQL Server.
Wszystkie trzy opcje korzystają z COUNT()
funkcja podczas odpytywania sys.objects
widok katalogu systemowego. Wszystkie dają ten sam wynik, więc naprawdę nie musisz przechodzić poza pierwszą opcję. Ale i tak je wymienię.
Opcja 1 – Według typu
Najbardziej zwięzłym sposobem na to jest filtrowanie według type
kolumna.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Wynik:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Tutaj filtruję według type
z S
. S
oznacza „Tabelę bazową systemu”.
Jeśli przejdę na master bazy danych, otrzymuję inny wynik:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Wynik:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Dzieje się tak, ponieważ mistrz baza danych zawiera niektóre tabele systemowe, których nie ma w innych bazach danych.
Możemy uruchomić następujące zapytanie, aby uzyskać nazwy:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Wynik:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
W tym przypadku porównuję mistrza bazy danych do modelu Baza danych. Możesz jawnie określić inną bazę danych, zamieniając model
z nazwą innej bazy danych.
Opcja 2 – Według „Opisu typu”
Inną opcją jest filtrowanie według type_desc
kolumna zamiast type
kolumna.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Wynik:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Opcja 3 – Według OBJECTPROPERTY()
Jeśli z jakiegoś powodu poprzednie dwie opcje nie są odpowiednie, możesz spróbować użyć OBJECTPROPERTY()
funkcjonować.
Ta funkcja przyjmuje dwa argumenty:identyfikator obiektu i właściwość. Identyfikator obiektu może być identyfikatorem tabeli, a właściwością może być IsSystemTable
, który określa, czy obiekt jest tabelą systemową.
Dlatego możesz zrobić coś takiego:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Wynik:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Wymień tabele
Możesz zmodyfikować te trzy opcje, jeśli chcesz wyświetlić listę tabel zamiast tylko je liczyć. Aby to zrobić, po prostu zastąp COUNT(*) AS [Number of User Tables]
z *
. Alternatywnie możesz wyraźnie nazwać kolumny, które chcesz zwrócić.
Policz tabele zdefiniowane przez użytkownika
Jeśli chcesz poznać liczbę użytkowników tabele, zobacz 5 sposobów liczenia liczby tabel zdefiniowanych przez użytkownika w SQL Server.