我想检索给定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相关问答推荐

如何处理以用户为中心的CSP现时值?(uc-lock.bundle.js)

每当属性值发生变化时引发事件?

.gitignore 和 Visual Studio 项目:忽略 bin/Debug 目录但不忽略 bin/Release 目录

Environment.TickCount 与 DateTime.Now

我可以从我的应用程序中抛出哪些内置 .NET 异常?

Int32.ToString() 是特定于文化的吗?

在 WinForms 应用程序中查找焦点控件的首选方法是什么?

LINQ:确定两个序列是否包含完全相同的元素

我可以从 .NET/C# 获取其他进程的命令行参数吗?

如何等到远程 .NET 调试器附加

如何退出所有正在运行的线程?

所有数组在 C# 中都实现了哪些接口?

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

如何使用配置转换删除 ConnectionString

如何过滤具有多个条件的 Directory.EnumerateFiles?

C# (.NET) 设计缺陷

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

具有不同身份验证标头的 HttpClient 单个实例

从字节数组中读取 C# 中的 C/C++ 数据 struct

如何为 Dapper 查询动态创建参数