使用来自不同服务器SQL Server的数据连接2个#temp表

时间:2016-09-13 20:23:40

标签: sql-server join temp-tables

我需要连接位于不同服务器上的某些表中的数据。我没有服务器的管理员权限所以我不能创建链接服务器,这是每次有人询问时的立即响应。我想我会尝试创建几个临时表,然后加入那些,但是虽然我能够成功创建#temp表并使用一些WHERE子句来减少表中的数据量,这是一个奖励,我可以'弄清楚如何加入这两者。我正在使用SQL Server Management Studio,似乎给定的SQL查询无法一次“看到”两个临时表。临时表是否仍存储在从中收集数据的服务器上?我的印象是他们都存储在一些我可以同时访问的临时数据库中。

首先我做了

SELECT ID 
      ,A
      ,B
      ,C
INTO ##Temp1 
FROM [DB1].[dbo].[Table1]
WHERE ID IS NOT NULL

然后在另一个窗口我做了

SELECT A_ID
    ,Q
    ,R
INTO ##Temp2  
FROM [DB2].[dbo].[Table2] 

但是我试图加入这两个

SELECT A_ID 
    ,Q 
    ,R 
    ,A
    ,B
    ,C   
FROM ##Temp2 AS TableA
LEFT JOIN ##Temp1 as TableB
ON TableA.A_ID = TableB.ID

我收到了错误

Invalid object name '##Temp1'.

这是我第一次尝试这样的事情,我觉得我在这里错过了一些非常简单的东西,但是我无法在所有搜索中找到任何东西。 :/

1 个答案:

答案 0 :(得分:0)

此处至少有五个选项,并且所有这些选项都不适用于“普通”用户:

  1. 创建链接服务器(您不需要sysadmin权限,只需要'ALTER ANY LINKED SERVER'权限)。但是这个服务器应该只创建一次,所以你的db admyn可以为你做。
    1. 将数据导出到平面文件并导入目标服务器(可以自动化)
      1. 创建一个空数据库,复制数据,进行备份,还原目标服务器上的备份 - 也可以自动化(这里需要某些权限来创建数据库,进行备份/恢复,但不需要sysadmin权限)
        1. 复制
          1. SSIS
          2. ...

            如果可以在两台服务器上创建两个相同的表,则可以使用CMS(中央管理服务器)在两台服务器上同时运行查询。可以将合并结果插入某个表中,然后进行处理。