关于c#:如何获取Sql Server数据库中所有模式的列表

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

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

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

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


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

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

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

1
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

这就是@Adrift的回答中提到的"落后的不兼容性"。

在SQL Server 2000(及更低版本)中,虽然您可以以类似的方式使用角色作为命名空间,但实际上并没有"模式"。在这种情况下,这可能是最接近的等价物。

1
SELECT * FROM sysusers WHERE gid <> 0


在此处尝试此查询:

1
SELECT * FROM sys.schemas

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

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


1
2
3
4
5
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视图:

1
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

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

Information schema views provide an
internal, system table-independent
view of the SQL Server metadata.
Information schema views enable
applications to work correctly
although significant changes have been
made to the underlying system tables.
The information schema views included
in SQL Server comply with the ISO
standard definition for the
INFORMATION_SCHEMA.

具有讽刺意味的是,紧接着是这个说明:

Some changes have been made to the
information schema views that break
backward compatibility. These changes
are described in the topics for the
specific views.


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

1
2
3
4
5
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,则可以通过浏览到以下内容来获取所有模式的列表,创建自己的模式或删除现有模式:

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