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

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

编辑:我可以通过查询system view-INFORMATION_SCHEMA.SCHEMATA来获得模式列表,但我更愿意使用模式API作为首选.

推荐答案

对于2005年及以后的时间,这两个都会给你想要的东西.

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

对于2000年,这将给出instance中的databases个列表.

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

这就是@Adrift的答案中提到的"向后不兼容性".

在SQLServer2000(及更低版本)中,虽然可以以类似的方式将角色用作名称空间,但实际上并不存在这样的"模式".在这种情况下,这可能是最接近的等效值.

SELECT * FROM sysusers WHERE gid <> 0

.net相关问答推荐

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

使用 MassTransit、.NET Core 和 RabbitMQ 的设计挑战

DbContext 丢弃更改而不释放

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

发布版本中的 Debug.WriteLine

生产代码中的 System.Diagnostics.Debug.WriteLine

struct 中需要覆盖什么以确保平等正常运行?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

[DllImport("QCall")] 是什么?

有没有办法只在 C# 中设置一次属性

为什么 System.Timers.Timer 能在 GC 中存活,而 System.Threading.Timer 不能?

非通用 TaskCompletionSource 或替代

.NET 的 String.Normalize 有什么作用?

如何对 LINQ to XML 中的元素进行深层复制?

在 .NET 中计算目录大小的最佳方法是什么?

.Net 中 AOP 的最佳实现是什么?

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

找不到 System.Windows.Media 命名空间?

C# 应用程序中的资源和嵌入式资源有什么区别?