Przy użyciu procedury składowanej można wykonać skrypt dla wszystkich tabel w bazie danych.Jak sprawdzić, czy tabele SQL Server są tabelami systemowymi
Istnieją jednak tabele systemowe, które chciałbym wykluczyć z tego. Instynktownie sprawdziłbym właściwości: IsSystemTable
lub IsMSShipped
. Te nie działają tak jak oczekuję - mam na przykład tabela o nazwie __RefactorLog
:
Kiedy jednak zapytać, czy jest to system lub MS Wysyłane tabela, SQL Server zgłasza żaden z moich tabelach System stoły:
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
i
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
Kiedy zbadać właściwości tabeli (wewnątrz SSMS), w tabeli oznaczony jako sy obiekt macierzysty. Właściwość obiektu, taka jak IsSystemObject
, nie istnieje (AFAIK).
Jak sprawdzić, czy tabela jest obiektem systemowym, oprócz właściwości obiektu? W jaki sposób SSMS sprawdza, czy tabela jest obiektem systemowym?
Chociaż to pytanie wygląda na http://stackoverflow.com/questions/3216219/get-list-of-tables-but-not-include-system-tables-sql-server-2k, nie jest ono duplikowane sposoby sprawdzania właściwości obiektów zmieniły się od czasu SQL Server 2000 i pytam o sposób, w jaki SSMS je sprawdza. – vstrien
Zawsze można uruchomić profiler programu SQL Server na serwerze po otwarciu folderu "Tabele systemowe" i sprawdzić, jaki SQL działa. –