С помощью хранимой процедуры sp_msforeachtable
можно выполнить сценарий для всех таблиц в базе данных.
Однако есть системные таблицы, которые я хотел бы исключить из этого списка. Инстинктивно я бы проверил свойства IsSystemTable
или IsMSShipped
. Это не работает так, как я ожидаю - например, у меня есть таблица с именем __RefactorLog
:
Но когда я запрашиваю, является ли это системой или таблицей 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 проверяет, является ли таблица системным объектом?