是否可以在链接服务器上创建临时表?

Her*_*ill 8 sql sql-server linked-server temp-tables

我正在对一个远程链接服务器进行一些相当复杂的查询,能够在临时表中存储一些信息然后对它进行连接是有用的 - 所有这些都与远程数据有关.在本地创建临时表并通过线路连接它们的速度非常慢.

是否可以强制在远程服务器上创建临时表?假设我没有足够的权限来创建我自己的真实(永久)表.

dou*_*g_w 5

这适用于在我的环境中链接到 SQL 2005 SP3 的 SQL 2005 SP3。但是,如果您检查 tempdb,您会发现该表实际上位于本地实例而不是远程实例上。我已将此视为其他论坛上的解决方案,并希望引导您远离此问题。

create table SecondServer.#doll
(
  name varchar(128)
)
GO
insert SecondServer.#Doll
select name from sys.objects where type = 'u'


select * from SecondServer.#Doll
Run Code Online (Sandbox Code Playgroud)


Kev*_*Kev 2

无法在链接的远程服务器上直接创建临时表。事实上,您不能对链接服务器使用任何 DDL。

有关使用链接服务器的准则和限制的更多信息,请参阅:

使用分布式查询的指南(SQL 2008 联机丛书)

一种解决方法(这是我的想法,只有当您在远程服务器上拥有权限时才有效),您可以:

  • 在远程服务器上有一个存储过程,该过程将创建一个持久表,其名称基于 IN 参数
  • 远程存储过程将运行查询然后将结果插入到该表中
  • 然后,您可以在本地查询该表,执行与所需的任何本地表的任何联接
  • 完成后调用远程服务器上的另一个存储过程来删除远程表

并不理想,但可能是一个解决方法。