Ето една статия, която представя три начина за бързо определяне колко системни таблици има в текущата база данни в SQL Server.
И трите опции използват COUNT()
функция, докато отправяте заявка към sys.objects
изглед на системния каталог. Всички те водят до еднакъв резултат, така че наистина не е нужно да преминавате покрай първата опция. Но все пак ще ги изброя.
Опция 1 – По тип
Най-краткият начин да направите това е филтриране по type
колона.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Резултат:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Тук филтрирам по type
на S
. S
означава „основна таблица на системата“.
Ако мина на главената база данни, получавам различен резултат:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Резултат:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Това е така, защото гмайсторът базата данни съдържа някои системни таблици, които не са в други бази данни.
Можем да изпълним следната заявка, за да получим имената:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Резултат:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
В случая сравнявам смайстора база данни към моделата база данни. Можете изрично да посочите различна база данни, като размените model
с името на другата база данни.
Опция 2 – По „Описание на типа“
Друга възможност е да филтрирате по type_desc
колона вместо type
колона.
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Резултат:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Опция 3 – От OBJECTPROPERTY()
Ако по някаква причина намирате предишните две опции за неподходящи, можете да опитате да използвате OBJECTPROPERTY()
функция.
Тази функция приема два аргумента:идентификатор на обект и свойство. Идентификаторът на обекта може да бъде идентификаторът на таблицата, а свойството може да бъде IsSystemTable
, което определя дали обектът е системна таблица или не.
Следователно, можете да направите нещо подобно:
USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Резултат:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Избройте таблиците
Можете да промените трите опции, ако искате да изброите таблиците, вместо просто да ги броите. За да направите това, просто заменете COUNT(*) AS [Number of User Tables]
с *
. Като алтернатива можете да посочите изрично колоните, които искате да бъдат върнати.
Преброяване на потребителски дефинирани таблици
Ако трябва да разберете броя на потребител таблици, вижте 5 начина за преброяване на броя на дефинираните от потребителя таблици в SQL Server.