![](/img/trans.png)
[英]How do I query a SQL Server database with a list of parameters in Dapper?
[英]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_accessadmin
、 db_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.