列出 sql server 2012 中的架构名称和所有者

Posted

技术标签:

【中文标题】列出 sql server 2012 中的架构名称和所有者【英文标题】:List schema name and owners in sql server 2012 【发布时间】:2014-10-04 00:25:44 【问题描述】:

我想列出所有数据库中的所有表名、列名、模式名和所有者,并编写了以下代码。我不确定从何处获取架构所有者的详细信息以添加到我的查询中。请帮忙。

select  c.name as colomn_name , t.name as table_name , s.name as schema_name 
 from sys.columns c 
   inner join  sys.tables t     on c.object_id=t.object_id
   INNER JOIN sys.schemas AS s  ON t.[schema_id] = s.[schema_id]

【问题讨论】:

【参考方案1】:

sys.schemas 中的 principal_id 列包含架构所有者的 ID,因此要获取名称,您可以简单地使用:

USER_NAME(s.principal_id) AS Schema_Owner

或者,如果您想了解更多信息,可以加入 sys.sysusers:

SELECT  s.Name, u.*
FROM    sys.schemas s
        INNER JOIN sys.sysusers u
            ON u.uid = s.principal_id

【讨论】:

谢谢。我如何获得表所有者? sys.tables 中使用principal_id 列,这仅在所有者与架构所有者不同的情况下才会填充。【参考方案2】:

这是一个在 SQL Server 下工作的更便携的解决方案:

SELECT schema_name, schema_owner
FROM information_schema.schemata

【讨论】:

以上是关于列出 sql server 2012 中的架构名称和所有者的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver语句问题

在 SQL Server 中,如何从子查询中标识的表列名称中检索数据值?

Sql Query 列出 SQL Server 2005 数据库中的所有视图

需要用表名和表的模式列出 SQL Server 数据库中的所有触发器

列出 SQL Server 2008 R2 中的所有数据源及其依赖项(报告、项目等)

SQL server 2012 数据库还原操作