如何获得Sql Server数据库中所有模式的列表

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

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

编辑:我可以通过查询系统视图 – INFORMATION_SCHEMA.SCHEMATA获取模式列表,但宁愿使用模式API作为第一select。

对于2005年和以后,这些都将给你所寻找的。

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

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

 SELECT * FROM INFORMATION_SCHEMA.SCHEMATA 

这就是@ Adrift的答案中提到的“后向不可兼性”。

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

 SELECT * FROM sysusers WHERE gid <> 0 

在这里试试这个查询:

 SELECT * FROM sys.schemas 

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

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

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

 SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA 

我相信build议查询INFORMATION_SCHEMA视图,因为它们可以保护您免受基础sys表的更改。 从SQL Server 2008 R2帮助:

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

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

已经对信息模式视图进行了一些改变,以打破向后兼容性。 这些更改在具体视图的主题中进行了描述。

 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' 

如果您正在使用Sql Server Management Studio,则可以获取所有模式的列表,创build自己的模式或删除现有的模式,方法是浏览至:

数据库 – [您的数据库] – 安全性 – 模式