Sql server 获取所有架构中可用的所有表名

Sql server 获取所有架构中可用的所有表名,sql-server,database,Sql Server,Database,我没有可用的架构名称。根据我的发现,我使用的所有查询都是特定于模式名称的。我需要所有表的名称,而不考虑模式名称。 有人能帮我吗。 我使用了以下查询: 从sys.tables中选择sch.name作为SchemaName,从sys.tables中选择tbl.name作为TableName tbl internal JOIN sys.schemas sch ON tbl.SCHEMA_ID=sch.SCHEMA_ID按tbl.name排序 从information.schema.tables中选择*

我没有可用的架构名称。根据我的发现,我使用的所有查询都是特定于模式名称的。我需要所有表的名称,而不考虑模式名称。 有人能帮我吗。 我使用了以下查询:

从sys.tables中选择sch.name作为SchemaName,从sys.tables中选择tbl.name作为TableName tbl internal JOIN sys.schemas sch ON tbl.SCHEMA_ID=sch.SCHEMA_ID按tbl.name排序

从information.schema.tables中选择*,其中TABLE_TYPE='BASE TABLE'

从sys.tables中选择*

从sysobjects中选择*xtype='U'

所有这些查询都是特定于模式的。如果要在架构之间切换,必须使用%schema\u NAME%。但是我需要得到所有的表名,而不考虑模式名

抱歉,但我想说的是

在SQLServer中,数据库和模式是非常不同的对象。模式是数据库中的对象,其中数据库位于实例中的对象上。sys和INFORMATION_SCHEMA对象也是数据库对象,因此只列出它们在其中引用的数据库上下文中的对象

例如,以下两个示例都将返回MyDB数据库中表的详细信息:

使用master; 挑选* 来自MyDB.sys.tables; 去 使用MyDB; 挑选* 从sys.tables; 如果您想获得每个数据库中表的详细信息,您需要单独查询它们,或者生成并运行动态语句。动态方法如下所示:

使用master; 去 声明@SQL nvarcharMAX, @CRLF nchar2=NCHAR13+NCHAR10; 声明@Delimiter nvarchar30=@CRLF+N'UNION ALL'+@CRLF; 设置@SQL=SELECT STRING_AGGN'SELECT N'+quoteName.[name],+N'为数据库名,t.[name]为'+quoteName.[name]+N'.sys.tables t'中的TableName,@Delimiter in GROUP ORDER BY d.database_id 从sys.d数据库 其中d.database_id>4+N';'-跳过系统数据库 -PRINT@SQL-你最好的朋友 EXEC sys.sp_executesql@SQL;
如果您使用的是较旧版本的SQL Server,则需要使用旧的FOR XML PATH方法,而不是STRING_AGG。

请与我们分享您进行的研究。。。有许多资源可以帮助您解决此问题。请使用其他信息编辑您的问题。如果您使用的是Microsoft使用的模式定义,那么这些查询都不是特定于模式的。另一方面,如果您使用的是其他一些数据库提供程序使用的模式定义,那么您要查找的是跨数据库工作的查询。如果您使用适合您正在使用的产品的术语,这将非常有帮助。根据我的发现,我正在使用的所有查询都特定于一个架构名称,您在哪里找到这些信息的,因为这是错误的。通过一个非常简单的测试可以很快证明这是错误的:我将提供一个例子来解释我自己。我使用的是MSSQL,其中有3种数据库模式,分别是“SCH-A”、“SCH-B”和“SCH-C”。目前我连接到SCH-A,现在当我使用上述任何查询时,我会得到SCH-A中表的列表,但我的要求是我需要编写一个查询,以获得SCH-A、SCH-B和SCH-C中所有可用的表名。注意:我事先不知道所有的模式名。我希望我的问题现在很清楚谢谢你的帮助,这个问题给了我我所需要的答案。