SQL Server - запрос системных объектов - PullRequest
2 голосов
/ 29 июня 2011

Я заметил, что когда я запрашиваю dbo.sysobjects, чтобы определить все объекты в моей базе данных, он также выбирает все системные представления, чье имя начинается с 'syncobj_'. У них есть x-тип 'V', и я никак не могу понять, что это системные представления, а не мои собственные, кроме как путем изучения имени представления. Есть ли другой способ? Я хотел бы исключить их из запроса, который я нахожусь в процессе создания.

Ответы [ 3 ]

2 голосов
/ 29 июня 2011

См. OBJECTPROPERTY:

IsMSShipped

Любой объект области схемы

Объект, созданный при установке SQL Server.1 = True 0 = False

Используйте это как-то так:

SELECT * from sysobjects where OBJECTPROPERTY(ID,N'IsMSShipped') = 0

Хотя эта документация немного устарела - она ​​также помогает исключить другие объекты, добавленные "SQL"Сервер на более позднюю дату - например, любые объекты, связанные с репликацией, также считаются IsMSShipped.

0 голосов
/ 29 июня 2011

Поскольку вы используете SQL Server 2008, очень мало причин продолжать использовать устаревшие sysobjects представления совместимости.Вместо этого вы должны использовать представление каталога sys.objects, представленное в SQL Server 2005. В качестве дополнительного бонуса вам не нужно вызывать внешнюю функцию OBJECTPROPERTY () для каждой отдельной строки, поскольку она содержит столбец с именем is_ms_shipped, который показываетта же информация.

SELECT OBJECT_SCHEMA_NAME([object_id]), name, type
 FROM sys.objects
 WHERE is_ms_shipped = 0;
0 голосов
/ 29 июня 2011

Попробуйте что-то вроде:

select *
from sysobjects
where name NOT IN (
    select name from sys.system_views
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...