如何从其他数据库获取SCHEMA.TABLES?

时间:2014-02-22 03:49:12

标签: c# sql-server

我想获得另一个数据库中存在的表列表。例如,如果我已连接 DB1 数据库,并且我想从 DB2 获取表的列表,那么它是如何实现的?

我知道还有其他一些方法,例如connect DB2 ,并执行插入查询以将模式插入 #temp 表,然后连接 DB1 使用USE [DB1]语句并使用 #temp 表。

但是,我不想在运行时更改我的sql连接。因为,我在sql连接上创建了一些依赖项。

更新:

可以在同一台服务器上恢复数据库。现在我使用以下查询从数据库中获取表列表。

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

版本的sql server是2005。

3 个答案:

答案 0 :(得分:2)

您需要sp_addlinkedserver()

http://msdn.microsoft.com/en-us/library/ms190479.aspx

示例:

exec sp_addlinkedserver @server = 'test'

然后

select * from [server].[database].[schema].[table]

Copy Table Schema and Data From One Database to Another Database in SQL Server

答案 1 :(得分:1)

Remus Rusanu已经提到了Here

尝试此查询

declare @sql nvarchar(max);
set @sql = N'select cast(''master'' as sysname) as db_name, name collate Latin1_General_CI_AI, object_id, schema_id, cast(1 as int) as database_id  from master.sys.tables ';

select @sql = @sql + N' union all select ' + quotename(name,'''')+ ', name collate Latin1_General_CI_AI, object_id, schema_id, ' + cast(database_id as nvarchar(10)) + N' from ' + quotename(name) + N'.sys.tables'
from sys.databases where database_id > 1
and state = 0
and user_access = 0;

exec sp_executesql @sql;

答案 2 :(得分:0)

我假设您已在连接字符串中设置数据库。

如果另一个数据库位于同一服务器上,则可以使用三部分名称

引用它们
select * from otherdb.schema.table

如果不是,您可以使用由四部分组成的名称

select * from otherserver.otherdb.schema.table 

但我的建议是不要直接这样做,而是为你计划在外部引用的每个对象创建一个同义词。

如果您执行重命名外部数据库等操作,那么您可以获得一些灵活性。