Utilizzando la stored procedure sp_msforeachtable
è possibile eseguire uno script per tutte le tabelle in un database.Come verificare se le tabelle di SQL Server sono tabelle di sistema
Tuttavia, ci sono tabelle di sistema che vorrei escludere da ciò. Istintivamente, controllerei le proprietà IsSystemTable
o IsMSShipped
. Questi non funzionare come mi aspetto - ho per esempio una tabella chiamata __RefactorLog
:
Ma quando interrogo se questo è un sistema o MS tavolo Spedito, SQL Server segnala nessuno dei miei tavoli sono sistema tabelle:
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
e
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
Quando guardo nelle proprietà della tabella (interno SSMS), la tabella è contrassegnato come sy oggetto staminale. Tuttavia una proprietà dell'oggetto come IsSystemObject
non esiste (AFAIK).
Come si verifica se una tabella è un oggetto di sistema, a parte la proprietà dell'oggetto? In che modo SSMS verifica se una tabella è un oggetto di sistema?
Sebbene questa domanda sembri http://stackoverflow.com/questions/3216219/get-list-of-tables-but-not-include-system-tables-sql-server-2k, non è duplicata come i modi di controllare le proprietà dell'oggetto sono cambiati da SQL Server 2000 e sto chiedendo il modo in cui SSMS lo controlla. – vstrien
È sempre possibile eseguire il profiler di SQL Server sul server quando si apre la cartella "Tabelle di sistema" e vedere quale SQL è in esecuzione. –