How do I obtain a list of all schemas in a Sql Server database
我想检索给定的Sql Server数据库中的所有模式的列表。 使用
我可以遍历
示例:对于标准
编辑:我可以通过查询系统视图 -
对于2005年及以后,这些都将提供您正在寻找的东西。
1 2 | SELECT name FROM sys.schemas SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA |
对于2000,这将给出实例中的数据库列表。
1 | SELECT * FROM INFORMATION_SCHEMA.SCHEMATA |
这就是@Adrift的回答中提到的"落后的不兼容性"。
在SQL Server 2000(及更低版本)中,虽然您可以以类似的方式使用角色作为命名空间,但实际上并没有"模式"。在这种情况下,这可能是最接近的等价物。
1 | SELECT * FROM sysusers WHERE gid <> 0 |
在此处尝试此查询:
1 | SELECT * FROM sys.schemas |
这将为您执行此操作的数据库中的所有定义模式提供名称和schema_id。
通过查询"模式API",我真的不知道你的意思 - 这些
1 2 3 4 5 | 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视图:
1 | SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA |
我认为建议查询INFORMATION_SCHEMA视图,因为它们可以保护您免受对底层sys表的更改。从SQL Server 2008 R2帮助:
Information schema views provide an
internal, system table-independent
view of the SQL Server metadata.
Information schema views enable
applications to work correctly
although significant changes have been
made to the underlying system tables.
The information schema views included
in SQL Server comply with the ISO
standard definition for the
INFORMATION_SCHEMA.
具有讽刺意味的是,紧接着是这个说明:
Some changes have been made to the
information schema views that break
backward compatibility. These changes
are described in the topics for the
specific views.
您还可以使用以下查询来获取特定数据库用户的模式:
1 2 3 4 5 | 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,则可以通过浏览到以下内容来获取所有模式的列表,创建自己的模式或删除现有模式:
数据库 - [您的数据库] - 安全 - 架构