2010-10-12 131 views
2

我有一个内联查询,其中我有一个table1在server1和另一个table2在server2。 我需要连接这两个表,并获取数据。如何从两个不同的sql服务器获取数据?

我可以这样做,如连接到一台服务器,获取数据并连接到下一台服务器...获取数据。 并加入它们。

但是还有没有其他更好的方法。我听说过关于链接服务器。这有帮助吗?

在此先感谢!

+0

为什么社区wiki? – 2010-10-12 19:29:15

+0

我在不知不觉中点击了它... wats:( – Relativity 2010-10-12 19:29:49

回答

5

是的,在一个服务器上建立一个链接服务器到另一个服务器。然后,您可以使用连接执行常规查询。它看起来像这样:

SELECT t1.Col1 
    , t2.ColA 
FROM server1Table t1 
INNER JOIN SERVER2.dbname.dbo.tableName t2 ON t1.TheId = t2.TheId 

这假定您正在运行Server1上的查询。您也可以使用两台链接的服务器,并使用[servername]。[dbname]。[schema]。[table]来引用它们,然后像​​平常一样在SQL中使用。

或者,您可以使用OPENROWSET(但如果您可以设置,链接的服务器是最容易的)。 OpenRowSets看起来像这样:

SELECT t1.Col1 
    , t2.ColA 
FROM server1Table t1 
INNER JOIN OPENROWSET('SQLNCLI', 'Server=Server2;Trusted_Connection=yes;', 
         'SELECT t2.ColA, t2.TheId FROM dbname.dbo.tableName') AS t2 
    ON t1.TheId = t2.TheId 

然后你就可以加入'a',就好像它是本地表一样。在这种情况下,它可能会将所有数据都拉到本地数据库中,所以您应该考虑将WHERE添加到内部查询以限制行,并且只获取所需的列。

+0

有没有其他的方式..我指的是链接服务器以外的其他方式:(我刚刚确认我们不能在我们公司使用lniked服务器。 – Relativity 2010-10-12 19:32:54

+0

您需要如果你还没有这些权限,你可以使用一个有sysadmin或者setupadmin权限角色的服务器,并且把两台服务器都作为链接服务器,然后在你自己的服务器上对这两台链接的服务器运行查询不过看看表现,我可以想象它变得毛茸茸的。 – Martijn 2010-10-12 19:37:12

+0

添加了OPENROWSET的描述。 – Rory 2010-10-12 22:07:24

相关问题