从给定数据库中选择所有表时,如何将 [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 2008 R2中,“选择前1000行”为“选择所有行”