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