可以从t-sql中远程执行查询吗?

时间:2010-11-09 10:57:54

标签: sql sql-server sql-server-2005 tsql

首先是原始问题:

鉴于有2个DB:DB1和DB2。我是否可以连接到DB1,在DB2上执行查询,就好像我已登录到DB2一样? 所以基本上:

  • 我已连接到DB1
  • 从TSQL中我以某种方式连接到DB2
  • 我在本地执行查询(并等待)
  • 我关闭连接并回到DB1
  • 我完成了查询的其余部分。

所以我知道我可以执行interDB查询,例如:select * from DB2.somedb.dbo.sometable但这不是我想要的。

背景:

是否有数据位于2台独立的数据库计算机上。我必须以这样的方式查询数据,以便组合两台机器上的表的数据。

我已经尝试了很多场景,并且每次运行速度非常慢,或者由于XML列存在于一个表或另一个表中而无法进行查询。

有效的解决方案(尽管是手动的)是:

  • 登录DB2并将一半查询执行到某个临时表
  • 将临时表复制到DB1
  • 登录到db1并执行查询的第二部分。

最好我想制作这一个脚本所以我可以自动化它

2 个答案:

答案 0 :(得分:3)

您是否查看了SQL Server中的OPENQUERY函数:

EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
GO

甚至是OPENROWSET函数:

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
     'SELECT GroupName, Name, DepartmentID
      FROM AdventureWorks.HumanResources.Department
      ORDER BY GroupName, Name') AS a;

在线使用SQL Server书籍以获取更多详细信息,或试用 googlefu

答案 1 :(得分:1)

首先,您必须链接两个SQL Server(SQL1和SQL2)。您需要在SQL1上为SQL2创建一个链接服务器,并使用对远程数据库具有适当权限的有效登录。关于MSDN的更多信息 - How to create a link server

创建链接服务器后,您应该既可以使用链接服务器功能,也可以使用openquery功能。

使用直接链接服务器从SQL1执行的查询(通过网络从SQL1执行指定的传递查询到SQL2-更多I / O)

select * from [LINKED_SERVER_SQL2].[DATABASE_NAME].dbo.[TABLE_NAME]

使用Openquery执行的查询(在给定的链接服务器上执行指定的传递查询 - 以免I / O)

select * from openquery (LINKED_SERVER_SQL2, 'select * from [DATABASE_NAME].dbo.[TABLE_NAME]')

此外,xml列的特殊性的答案可以在this pos t找到,我几天前写了一篇关于我发现的同样问题的博客