SQL Server dbo.sysdiagrams是用户表或系统表

meh*_*tfi 19 sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

在简单数据库中使用数据库图时,SQL Server在Table\Systam Tables节点中创建一个dbo.sysdiagrams表(在Microsoft management studio\object explorer中).但sysdiagrams表在SQL Server中标记为用户表.您可以通过以下查询获取用户表.

SELECT * 
FROM sys.tables t
WHERE OBJECTPROPERTY(t.object_id,'IsUserTable') = 1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不知道sysdiagram表是系统表还是用户表.

存在microsoft_database_tools_support的值1在sysdiagram的扩展属性中,它确定自动创建的表.

在此输入图像描述

小智 13

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]
Run Code Online (Sandbox Code Playgroud)


Ala*_*sio 7

系统表由SQL Server在内部使用,它们在每个用户数据库中都是相同的.

从服务器的角度来看,sysdiagrams不是系统表.

但SQL Server Management Studio创建它以存储图表数据,因此它还将其分类为系统表.

您可以使用您提到的扩展属性排除此类系统表.

  • 我对这张桌子很好奇.在`sys.objects`或`sys.tables`上没有标记为is_ms_shipped.并且指向系统表的任何其他标志也是零.那怎么能检查呢? (3认同)