查询链接服务器上的全局临时表

时间:2012-12-03 22:49:56

标签: sql-server sql-server-2008 distributed-transactions

我已经看到了关于如何在两个不同的SQL服务器上查询两个不同表的所有参考,我理解它是如何实现的。但是,该命令似乎不适用于使用##创建的临时表。

如果我在一台服务器上编写一个连接,并且它引用该服务器上的一个临时表和另一台服务器上的一个临时表,则SQL Server会假定因为##在命令中,它会自动查找在本地服务器的tempdb,而不是远程服务器。我目前也无法使用OPENROWSET,因为该功能已被禁用,我必须获得批准才能将其重新启用。

所以我的问题是,有一种方法可以重新配置此命令以识别要查看哪个tempdb

SELECT * 
FROM (##mytemptable1 Demog 
INNER JOIN MyServer.tempdb.dbo.##mytemptable2 PeakInfo ON (Demog.SAMPLE_NO = PeakInfo.SampleNum)  AND  (Demog.JOB_NO = PeakInfo.JobNum) )
ORDER BY PeakInfo.JobNum, PeakInfo.SampleNum,   PeakInfo.Replicate ,PeakInfo.Reinjection ,PeakInfo.PeakNameCustSort

2 个答案:

答案 0 :(得分:18)

尝试此操作以从链接服务器

查询全局临时表
SELECT * FROM OPENQUERY(linkedServerName, 'SELECT * FROM ##temp')

答案 1 :(得分:1)

MSDN http://msdn.microsoft.com/en-us/library/ms186986(v=sql.105).aspx表示全局临时表仅在特定的SQL Server实例上可见:

  

任何用户和任何连接都可以看到全局临时表   创建它们之后,当所有用户都被删除时被删除   引用表断开与SQL Server实例的连接。

此外,对远程全局临时表尝试的任何操作都会产生明确的错误消息:

SELECT * FROM LinkedServerName.TempDB.dbo.##GLOBTABLE

Database name 'TempDB' ignored, referencing object in tempdb.

看起来答案是否定的,没有(简单)方式。