获取位于当前服务器上另一个数据库中的另一个 table 的列

Get Columns of another table located in another database on the current server

我当前选择的数据库是DATABASE_A。我想编写一个 SELECT 查询 returns TABLE_NAME 的所有列名,它们位于另一个名为 DATABASE_B 的数据库中。两个数据库都位于同一台服务器上。这可能吗?

更新: 我想我会改进我的问题:我手头的不是数据库名称和 table.这意味着我只有 DATABASE_B.TABLE_NAME。在当前的答案中(实际上是非常正确的),我们能够将数据库名称与 table 名称分开。

Information_Schema.ColumnsDatabase 名称一起使用

USE DATABASE_A

SELECT *
FROM   DATABASE_B.INFORMATION_SCHEMA.columns
WHERE  TABLE_NAME = 'TABLE_NAME' 

这是我的更新程序:

declare @dbName varchar(100),
        @tableName varchar(100)

declare @stringToParse varchar(1000) = 'DatabaseName.TableName'

set     @dbName = SUBSTRING(@stringToParse, 0, charindex('.', @stringToParse))
set     @tableName = SUBSTRING(@stringToParse, charindex('.', @stringToParse) + 1, len(@stringToParse) - charindex('.', @stringToParse))

select  @dbName, @tableName



declare @stringToExecute varchar(max) = 'select  c.name
from    ' + @dbName + '.sys.tables t inner join
        ' + @dbName + '.sys.columns c on t.object_id = c.object_id
where   t.name = ''' +  @tableName + ''''

select  @stringToExecute -- this will show you what was generated
exec(@stringToExecute) -- this will run the sql that was generated.

这是select @stringToExecute

的输出
select  c.name
from    DatabaseName.sys.tables t inner join
        databaseName.sys.columns c on t.object_id = c.object_id
where   t.name = 'TableName'

我不确定数据库和 table 名称的来源,但是生成此动态 SQL 非常 危险!虽然这段代码可以满足您的需求,但您可能需要在使用之前重新考虑一下。