Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

3 sposoby na zliczanie liczby tabel systemowych w bazie danych SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać każdy wiersz, w którym wartość kolumny NIE jest odrębna?

  2. Wstaw wszystkie wartości z tabeli do innej tabeli w SQL

  3. Dziennik transakcji SQL Server — część 2

  4. Piętro data w serwerze SQL

  5. Jak wyodrębnić lub przekonwertować dane czasu z ciągu w SQL Server