Как проверить, являются ли таблицы SQL Server системными таблицами

С помощью хранимой процедуры sp_msforeachtableможно выполнить сценарий для всех таблиц в базе данных.

Однако есть системные таблицы, которые я хотел бы исключить из этого списка. Инстинктивно я бы проверил свойства IsSystemTableили IsMSShipped. Это не работает так, как я ожидаю - например, у меня есть таблица с именем __RefactorLog:

System table

Но когда я запрашиваю, является ли это системой или таблицей MS Shipped, SQL Server сообщает, что ни одна из моих таблиц не является системной. таблицы:

exec (N'EXEC Database..sp_msforeachtable "PRINT ''? = '' + CAST(ObjectProperty(Object_ID(''?''), ''IsSystemTable'') AS VARCHAR(MAX))"') AS LOGIN = 'MyETLUser'
-- Results of IsSystemTable:
[dbo].[__RefactorLog] = 0
[schema].[myUserTable] = 0

и

exec (N'EXEC Database..sp_msforeachtable "PRINT ''? = '' + CAST(ObjectProperty(Object_ID(''?''), ''IsMSShipped'') AS VARCHAR(MAX))"') AS LOGIN = 'MyETLUser'

-- Results of IsMSShipped:
[dbo].[__RefactorLog] = 0
[schema].[myUserTable] = 0

. Когда я просматриваю свойства таблицы (внутри SSMS), таблица помечается как системный объект. Однако свойство объекта, такое как IsSystemObject , не существует (AFAIK).

Как проверить, является ли таблица системным объектом, помимо свойства объекта? Как SSMS проверяет, является ли таблица системным объектом?

9
задан vstrien 5 April 2012 в 02:55
поделиться