代码之家  ›  专栏  ›  技术社区  ›  Toad

一个远程用户可以从t-sql中执行查询吗?

  •  2
  • Toad  · 技术社区  · 14 年前

    假设有两个DBs:DB1和DB2。当我连接到DB1时,是否可以像登录到DB2一样在DB2上执行查询? 所以基本上:

    • 我连接到DB1
    • 我在本地执行查询(并等待)
    • 我关闭连接,然后重新使用DB1
    • 我做剩下的查询。

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

    有数据放在两台独立的数据库机器上。我必须以这样的方式查询数据,以便将两台机器上的表中的数据组合起来。

    我已经尝试了很多场景,每次都运行得很慢,或者由于一个表或另一个表中存在XML列而无法执行查询。

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

    很好,我想把这一切都变成一个脚本,这样我就可以把它自动化了

    2 回复  |  直到 14 年前
        1
  •  3
  •   Guy    14 年前

    你看过 OPENQUERY SQL Server中的函数:

    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联机丛书了解更多详细信息,或尝试 谷歌

        2
  •  1
  •   yrushka    14 年前

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

    创建链接服务器后,您应该能够同时使用链接服务器功能和openquery功能。

    使用直接链接服务器从SQL1执行的查询

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

    使用Openquery执行的查询

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

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