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

时间:2019-01-29 10:07:02

标签: sql sql-server

我正在使用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'

1 个答案:

答案 0 :(得分: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'