Poniżej znajduje się pięć metod, za pomocą których można szybko określić, ile tabel zdefiniowanych przez użytkownika znajduje się w bieżącej bazie danych w programie SQL Server.
Wszystkie pięć opcji korzysta z COUNT()
funkcja, aby uzyskać liczbę. Oczywiście możesz to zastąpić gwiazdką (*
) lub nazwy kolumn, aby zwrócić listę wszystkich tabel zdefiniowanych przez użytkownika.
Opcja 1 – sys.tables
Najbardziej oczywistym sposobem na to jest wykonanie zapytania do sys.tables
widok katalogu systemowego. Całym celem tego widoku jest zwrócenie wiersza dla każdej tabeli użytkownika, więc jest to dokładnie to, czego potrzebujemy.
USE WideWorldImportersDW; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 29 | +-------------------------+
W tym przypadku zwracam liczbę tabel użytkowników z WideWorldImportersDW
baza danych.
Jeśli przejdę do innej bazy danych, otrzymam inny wynik:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Jak wspomniano, możesz wyświetlić listę tabel po prostu zastępując COUNT(*)
linia z gwiazdką (*
) lub nazwy kolumn:
USE Music; SELECT name FROM sys.tables;
Wynik:
+---------+ | name | |---------| | Artists | | Genres | | Albums | | Country | +---------+
Opcja 2 – Filtruj sys.objects według typu
Inną opcją jest zapytanie o sys.objects
widok katalogu.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type = 'U';
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
W takim przypadku musisz filtrować według type = 'U'
(U
dotyczy „Tabeli użytkownika”).
Opcja 3 – Filtruj sys.objects według „Opisu typu”
Inny sposób odpytywania sys.objects
Widok polega na filtrowaniu wyników według type_desc
kolumna.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type_desc = 'USER_TABLE';
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Opcja 4 – Filtruj sys.objects za pomocą funkcji OBJECTPROPERTY()
Możesz także użyć OBJECTPROPERTY()
funkcja w Twoim WHERE
klauzula.
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ć IsUserTable
, który określa, czy obiekt jest tabelą systemową.
Dlatego możesz zrobić coś takiego:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Opcja 5 – INFORMACJE_SCHEMA.TABELI
Ta opcja wysyła zapytanie do INFORMATION_SCHEMA.TABLES
widok schematu informacji. Ten widok zwraca zarówno widoki, jak i tabele, więc musisz filtrować według TABLE_TYPE = 'BASE TABLE'
zwrócić tylko tabele.
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
Wynik:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Jeśli chcesz sprawdzić liczbę tabel systemowych, zobacz 3 sposoby liczenia liczby tabel systemowych w SQL Server.