2012-12-03 34 views
6

我已经看到了关于如何在两个不同的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 
+0

由一个单独的进程创建的远程临时表,或者某个连接在一起的同一个? –

回答

0

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.

貌似答案是否定的,有没有(简单)的方式。

13

试试这个从链接的服务器查询全局临时表

SELECT * FROM OPENQUERY(linkedServerName, 'SELECT * FROM ##temp') 
+2

我可以验证这个作品,不确定OP是否可以访问OpenQuery,虽然OpenRowSet被禁用。 – scw