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