我正在远程链接的服务器上执行一些相当复杂的查询,如果能够在临时表中存储一些信息并针对远程数据执行联接将会非常有用。但是,在本地创建临时表并通过网络进行联接的速度非常慢。
是否有可能强制在远程服务器上创建临时表?假设我没有足够的权限来创建自己的真实(永久)表。
我正在远程链接的服务器上执行一些相当复杂的查询,如果能够在临时表中存储一些信息并针对远程数据执行联接将会非常有用。但是,在本地创建临时表并通过网络进行联接的速度非常慢。
是否有可能强制在远程服务器上创建临时表?假设我没有足够的权限来创建自己的真实(永久)表。
在我的环境中,这适用于连接到 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
我晚了2年才来参加这个派对,但是你可以使用sp_executeSQL
并向其提供一个动态查询来远程创建表。
Exec RemoteServer.RemoteDatabase.RemoteSchema.SP_ExecuteSQL N'在这里创建表'
这将在远程位置执行临时表的创建。
是的,你可以这样做,但它只能在连接期间持续有效。你需要使用“EXECUTE AT”语法。
EXECUTE('SELECT * INTO ##example FROM sys.objects; WAITFOR DELAY ''00:01:00''') AT [SERVER2]
SELECT * FROM ##example
但它在本地服务器上不起作用。顺便说一下,如果您在第二个服务器上打开使用##example的事务,则该对象将保留,直到关闭事务为止。 它还会阻止第一个服务器上创建语句的完成。 也就是说,在server2上运行时,server1上的事务将无限期地继续。
BEGIN TRAN
SELECT * FROM ##example WITH (TABLOCKX)
这更偏向于学术性而非实用性!