我当前选择的数据库是DATABASE_A
。我想编写一个SELECT
查询,该查询返回位于名为TABLE_NAME
的另一个数据库中的DATABASE_B
的所有列名。两个数据库都位于同一服务器上。这可能吗?
更新:我想我会改进我的问题:我手头的东西不是数据库名称和表名的两个独立变量。这意味着我拥有的只是DATABASE_B
。TABLE_NAME
。在当前的答案中(实际上非常正确),我们能够将数据库名称与表名分开。
答案 0 :(得分:2)
将Information_Schema.Columns
与Database
名称
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 极其危险!虽然这段代码可以满足您的需求,但您可能需要在使用它之前重新考虑它。