如何获得Sql Server数据库中所有模式的列表
我想检索给定的Sql Server数据库中的所有模式的列表。 使用ADO.NET
模式检索API,我得到了所有集合的列表,但没有“模式”的集合。 我可以遍历'Tables'
, 'Procedures'
集合(如果需要的话),并获得唯一的模式名称列表,但没有一个更简单/更短的方式来实现相同的结果?
例如:对于标准的'AdventureWorks'
数据库,我也想获得以下列表 – dbo,HumanResources,Person,Production,Purchasing,Sales
(我省略了其他标准schem名称,如db_accessadmin
, db_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自己的模式或删除现有的模式,方法是浏览至:
数据库 – [您的数据库] – 安全性 – 模式