You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Microsoft SQL Server指定数据库中所有表的所有者名称或ID

SQL Server查询指定数据库所有表所有者信息方法

以下操作仅需在MSSMS中执行对应查询语句即可实现,无需额外服务器级监控工具:

核心查询逻辑

SQL Server 中表的所有者默认继承所属架构的所有者,你之前查询sys.tables未直接返回所有者名称,是因为需要关联sys.schemas(架构系统视图)和sys.database_principals(数据库主体系统视图)拼接可读的所有者信息。

常用查询语句

1. 查询所有表的所有者(继承架构所有者场景)

USE WAREHOUSE_DATA
GO

SELECT 
    t.name AS 表名,
    s.name AS 所属架构名,
    dp.name AS 所有者名称,
    dp.principal_id AS 所有者ID
FROM sys.tables t
INNER JOIN sys.schemas s 
    ON t.schema_id = s.schema_id
INNER JOIN sys.database_principals dp 
    ON s.principal_id = dp.principal_id
ORDER BY t.name ASC

2. 兼容单独指定表所有者场景的全量查询

如果存在表单独指定了所有者、未继承架构所有者的情况,使用以下语句可以覆盖所有场景:

USE WAREHOUSE_DATA
GO

SELECT 
    t.name AS 表名,
    s.name AS 所属架构名,
    CASE 
        WHEN t.principal_id IS NOT NULL THEN dp_individual.name
        ELSE dp_schema.name 
    END AS 实际所有者名称,
    CASE 
        WHEN t.principal_id IS NOT NULL THEN '表单独指定'
        ELSE '继承架构'
    END AS 所有者来源
FROM sys.tables t
INNER JOIN sys.schemas s 
    ON t.schema_id = s.schema_id
INNER JOIN sys.database_principals dp_schema 
    ON s.principal_id = dp_schema.principal_id
LEFT JOIN sys.database_principals dp_individual 
    ON t.principal_id = dp_individual.principal_id
ORDER BY t.name ASC

注意事项

  • 执行查询的账号需要对WAREHOUSE_DATA数据库持有VIEW DEFINITION权限,否则可能无法返回完整的元数据结果
  • 若查询结果中所有者显示为dbo属于正常情况,dbo是SQL Server数据库的默认所有者主体

内容的提问来源于stack exchange,提问作者fym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:36:03