我需要连接位于不同服务器上的一些表的数据。我没有在服务器上的管理权限,所以我不能创建链接的服务器,这是即时响应,每次有人问这个。我想我会尝试创建几个临时表,然后加入这些表,但是,虽然我能够成功地创建#temp表,并使用一些WHERE子句来减少表中的数据量,这是一个奖励,我不知道如何连接两者。我正在使用SQL Server管理工作室,它似乎是一个给定的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'.
这是我第一次尝试这样的东西,我觉得我在这里错过了一些很简单的东西,但我无法在我所有的搜索中找到任何东西。:/
这里至少有五个选项,并且它们都不是'普通'用户可用的:
- 创建一个链接服务器(你不需要sysadmin权限,你只需要'ALTER ANY linked server '权限)但是这个服务器应该只创建一次,所以你的数据库管理员可以为你做。
或
- 将数据导出为平面文件并在目标服务器上导入(可以自动执行)
- 创建一个空的数据库,复制数据,做备份,在目标服务器上恢复备份-也可以自动化(这里你需要一定的权限来创建一个数据库,做备份/恢复,但系统管理员权限是不必要的)
- SSIS
或
或
- 复制
或
…
如果您可以在两台服务器上创建两个相同的表,那么您可以使用CMS (Central Management Server)在两台服务器上同时运行查询。合并后的结果可以插入到某个表中,然后再进行处理。