我想获得另一个数据库中存在的表列表。例如,如果我已连接 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。
答案 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
但我的建议是不要直接这样做,而是为你计划在外部引用的每个对象创建一个同义词。
如果您执行重命名外部数据库等操作,那么您可以获得一些灵活性。