2012-12-03 60 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