単純なデータベースでデータベースダイアグラムを使用すると、SQL ServerはTable\Systam Tables
ノード(Microsoft管理スタジオ\オブジェクトエクスプローラー)にdbo.sysdiagramsテーブルを作成します。ただし、sysdiagramsテーブルはSQL Serverでユーザーテーブルとしてマークされています。以下のクエリでユーザーテーブルを取得できます。
SELECT *
FROM sys.tables t
WHERE OBJECTPROPERTY(t.object_id,'IsUserTable') = 1
Sysdiagramテーブルがシステムテーブルまたはユーザーテーブルであることを知りません。
存在Microsoft_database_tools_support
値1
sysdiagramの拡張プロパティでは、このテーブルが自動的に作成されることを決定します。
システムテーブルはSQL Serverによって内部的に使用され、すべてのユーザーデータベースで同じです。
sysdiagramsは、サーバーの観点からはシステムテーブルではありません。
ただし、SQL Server Management Studioは、ダイアグラムデータを格納するためにそれを作成するため、システムデータとしても分類します。
言及した拡張属性を使用して、このようなシステムテーブルを除外できます。
Management Studioは、「tbl」がsys.tablesである「システムオブジェクト」の決定に以下を利用します。
CAST(
case
when tbl.is_ms_shipped = 1 then 1
when (
select
major_id
from
sys.extended_properties
where
major_id = tbl.object_id and
minor_id = 0 and
class = 1 and
name = N'Microsoft_database_tools_support')
is not null then 1
else 0
end
AS bit) AS [IsSystemObject]