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

时间:2015-01-22 16:53:30

标签: sql sql-server database ssms

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

更新:我想我会改进我的问题:我手头的东西不是数据库名称和表名的两个独立变量。这意味着我拥有的只是DATABASE_BTABLE_NAME。在当前的答案中(实际上非​​常正确),我们能够将数据库名称与表名分开。

2 个答案:

答案 0 :(得分:2)

Information_Schema.ColumnsDatabase名称

一起使用
USE DATABASE_A

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

答案 1 :(得分:1)

这是我更新的程序:

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'

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