使用存儲過程sp_msforeachtable
可以爲數據庫中的所有表執行腳本。如何檢查SQL Server表是否是系統表
但是,我想從中排除系統表。本能地,我會檢查屬性IsSystemTable
或IsMSShipped
。這些不工作像我期待的 - 我有例子的表稱爲__RefactorLog
:
但是,當我詢問這是否是出貨臺系統或MS,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),該表被標記爲SY莖對象。 (AFAIK)不存在像IsSystemObject
這樣的對象屬性。
如何檢查表是否是系統對象,除了對象屬性? SSMS如何檢查表是否是系統對象?
雖然這個問題看起來像http://stackoverflow.com/questions/3216219/get-list-of-tables-but-not-include-system-tables-sql-server-2k,它不是作爲複製自SQL Server 2000以來,檢查對象屬性的方式已經發生了變化,我正在問SSMS如何檢查它。 – vstrien 2012-04-05 13:56:18
你總是可以對您的服務器上運行SQL Server Profiler中打開「系統表」文件夾時,看它的運行了哪些SQL。 – 2012-04-05 14:04:17