从给定数据库中选择所有表时,如何将 [dbo] 前缀附加到表名?

Posted

技术标签:

【中文标题】从给定数据库中选择所有表时,如何将 [dbo] 前缀附加到表名?【英文标题】:How to attach [dbo] prefix to table name when selecting all tables from a given database? 【发布时间】:2019-06-22 10:19:18 【问题描述】:

我正在使用 SSMS 或直接使用 C# 代码执行问题下方列出的查询。结果,我得到了一个表,其中包含该数据库中所有可用表的名称列表。

在大多数情况下,这些表名可以直接用于所有类型的“SELECT”查询。但是,如果当前数据库是 AdventureWorks2017,则所有表名都已损坏。如果我想执行任何“SELECT”查询,我必须手动添加所有不是 [dbo] 的前缀(例如,[HumanResources]、[Person] 等)。

另外,我的问题是:我应该使用什么样的查询来获得完整的前缀表名(如[AdventureWorks2017].[HumanResources].[Employee] or [Northwind].[dbo].[CustomerCustomerDemo])?

use 'someDBName' 
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'someDBName'

【问题讨论】:

有一个名为 ApexSQL 的 SSMS 插件,可以像这样格式化您的查询 请阅读架构。 ***.com/questions/529142/… @EzLo,谢谢你的参考! 【参考方案1】:
SELECT '[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' AS SchemaAndTable
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'DbName'

FWIW,表名没有损坏,它们只是与 dbo 的通常(默认)模式不同

要同时获取数据库名称,您可以这样做:

SELECT '[' + TABLE_CATALOG + '].[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' AS DbSchemaAndTable
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'DbName'

【讨论】:

以上是关于从给定数据库中选择所有表时,如何将 [dbo] 前缀附加到表名?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server如何编辑超过前200行的数据

将数据插入另一个表时触发以更新带有时间戳的表

SQL Server 2008 R2中,“选择前1000行”为“选择所有行”

具有不同所有者的 SQL Server 所有权链跨架构,用于从多个架构中选择视图

SQLServer删除数据

如何根据case语句在连接多个表时选择一行