alw*_*ing 59 .net c# sql-server ado.net
我想检索给定的Sql Server数据库中的所有模式的列表.使用ADO.NET
模式检索API,我得到了所有集合的列表,但没有"模式"的集合.我可以穿越'Tables'
,'Procedures'
(如果需要和其他人)的集合,并获得独特的架构名称列表,但不存在实现相同结果的更简单/短呢?
示例:对于标准'AdventureWorks'
数据库,我也想获得以下列表 - dbo,HumanResources,Person,Production,Purchasing,Sales
(我省略了其他标准的Schem名称,如db_accessadmin
,db_datareader
等)
编辑:我可以通过查询系统视图获取模式列表 - INFORMATION_SCHEMA.SCHEMATA
但更喜欢使用模式API作为首选.
har*_*rpo 70
对于2005年及以后,这些都将提供您正在寻找的东西.
SELECT name FROM sys.schemas
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
Run Code Online (Sandbox Code Playgroud)
2000年,这会给列表数据库中的实例.
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
Run Code Online (Sandbox Code Playgroud)
这就是@Adrift的回答中提到的"落后的不兼容性".
在SQL Server 2000(及更低版本)中,虽然您可以以类似的方式将角色用作命名空间,但实际上并没有"模式".在这种情况下,这可能是最接近的等价物.
SELECT * FROM sysusers WHERE gid <> 0
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 13
在此处尝试此查询:
SELECT * FROM sys.schemas
Run Code Online (Sandbox Code Playgroud)
这将为您执行此操作的数据库中的所有定义模式提供名称和schema_id.
通过查询"模式API"我真的不知道你的意思 - 这些sys.
目录视图(在sys
模式中)是关于这些数据库中的数据库和对象的任何系统信息的最佳选择.
小智 6
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';
Run Code Online (Sandbox Code Playgroud)
您还可以查询INFORMATION_SCHEMA.SCHEMATA视图:
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
Run Code Online (Sandbox Code Playgroud)
我认为建议查询INFORMATION_SCHEMA视图,因为它们可以保护您免受对底层sys表的更改.从SQL Server 2008 R2帮助:
信息架构视图提供SQL Server元数据的内部系统表独立视图.尽管已对基础系统表进行了重大更改,但信息模式视图使应用程序能够正常工作.SQL Server中包含的信息架构视图符合INFORMATION_SCHEMA的ISO标准定义.
具有讽刺意味的是,紧接着是这个说明:
对破坏向后兼容性的信息模式视图进行了一些更改.这些更改在特定视图的主题中进行了描述.
归档时间: |
|
查看次数: |
108186 次 |
最近记录: |