繁体   English   中英

如何获取 Sql Server 数据库中所有架构的列表

[英]How do I obtain a list of all schemas in a Sql Server database

我想检索给定 Sql Server 数据库中所有架构的列表。 使用ADO.NET架构检索 API,我获得了所有集合的列表,但没有“架构”集合。 我可以遍历'Tables''Procedures'集合(以及其他需要'Procedures'集合)并获取唯一模式名称的列表,但是没有更简单/更短的方法来实现相同的结果吗?

示例:对于标准的'AdventureWorks'数据库,我想获得以下列表 - dbo,HumanResources,Person,Production,Purchasing,Sales (我省略了其他标准方案名称,如db_accessadmindb_datareader等)

编辑:我可以通过查询系统视图来获取模式列表 - INFORMATION_SCHEMA.SCHEMATA但更喜欢使用模式 API 作为首选。

对于 2005 年及以后,这些都将提供您正在寻找的内容。

SELECT name FROM sys.schemas
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

对于 2000,这将给出实例中的数据库列表。

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

这就是@Adrift 的回答中提到的“向后不兼容”。

在 SQL Server 2000(及更低版本)中,并没有真正的“模式”,尽管您可以以类似的方式将角色用作命名空间。 在这种情况下,这可能是最接近的等价物。

SELECT * FROM sysusers WHERE gid <> 0

在这里试试这个查询:

SELECT * FROM sys.schemas

这将为您提供执行此操作的数据库中所有定义模式的名称和 schema_id。

我真的不知道查询“模式 API”是什么意思 - 这些sys. 目录视图(在sys模式中)是有关数据库和这些数据库中对象的任何系统信息的最佳选择。

SELECT s.name + '.' + ao.name
       , s.name
FROM sys.all_objects ao
INNER JOIN sys.schemas s ON s.schema_id = ao.schema_id
WHERE ao.type='u';

您还可以查询 INFORMATION_SCHEMA.SCHEMATA 视图:

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

我相信建议查询 INFORMATION_SCHEMA 视图,因为它们可以保护您免受底层 sys 表的更改。 来自 SQL Server 2008 R2 帮助:

信息架构视图提供 SQL Server 元数据的内部、独立于系统表的视图。 尽管对底层系统表进行了重大更改,但信息模式视图使应用程序能够正常工作。 SQL Server 中包含的信息架构视图符合 INFORMATION_SCHEMA 的 ISO 标准定义。

具有讽刺意味的是,紧随其后的是以下注释:

对破坏向后兼容性的信息架构视图进行了一些更改。 这些更改在特定视图的主题中进行了描述。

您还可以使用以下查询来获取特定数据库用户的架构:

select s.schema_id, s.name as schema_name
from sys.schemas s
inner join sys.sysusers u on u.uid = s.principal_id
where u.name='DataBaseUserUserName'
order by s.name

如果您使用的是 Sql Server Management Studio,您可以获得所有架构的列表、创建您自己的架构或通过浏览到以下位置删除现有架构:

数据库 - [您的数据库] - 安全 - 架构

[

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM