【问题标题】:Query global temp table on a linked server查询链接服务器上的全局临时表
【发布时间】:2012-11-21 12:06:51
【问题描述】:

我已经看过所有关于如何在两个不同的 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

【问题讨论】:

  • 远程临时表是由单独的进程创建的,还是由将它们连接在一起的同一个进程创建的?

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


【解决方案1】:

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

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

【讨论】:

  • 我可以验证这是否有效,但不确定 OP 是否可以访问 OpenQuery,因为 OpenRowSet 已被禁用。
【解决方案2】:

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.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多