ストアド プロシージャを使用する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はどのようにチェックしますか?