web-dev-qa-db-ja.com

SQL Server dbo.sysdiagramsはユーザーテーブルまたはシステムテーブルです

単純なデータベースでデータベースダイアグラムを使用すると、SQL ServerはTable\Systam Tablesノード(Microsoft管理スタジオ\オブジェクトエクスプローラー)にdbo.sysdiagramsテーブルを作成します。ただし、sysdiagramsテーブルはSQL Serverでユーザーテーブルとしてマークされています。以下のクエリでユーザーテーブルを取得できます。

SELECT * 
FROM sys.tables t
WHERE OBJECTPROPERTY(t.object_id,'IsUserTable') = 1

enter image description here

Sysdiagramテーブルがシステムテーブルまたはユーザーテーブルであることを知りません。

存在Microsoft_database_tools_support1 sysdiagramの拡張プロパティでは、このテーブルが自動的に作成されることを決定します。

enter image description here

19
mehdi lotfi

システムテーブルはSQL Serverによって内部的に使用され、すべてのユーザーデータベースで同じです。

sysdiagramsは、サーバーの観点からはシステムテーブルではありません。

ただし、SQL Server Management Studioは、ダイアグラムデータを格納するためにそれを作成するため、システムデータとしても分類します。

言及した拡張属性を使用して、このようなシステムテーブルを除外できます。

7
Alain Tésio

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]
13
Anon