我正在使用EXEC(sql)AT LinkedServer命令从远程服务器获取一些数据。到目前为止,我在脚本中对结果唯一能做的就是将它们插入到本地表中。
CREATE TABLE #MyTable (Col1 VARCHAR(10))
INSERT INTO #MyTable
EXEC ('SELECT Col1 FROM MyDB.dbo.Table1 WHERE Col2 = ?', 'Val2') AT REMOTEDDB
这很好用,我可以用它。
我想将结果集直接加入到本地表中,就像OPENQUERY一样,但我找不到它的语法。它可能不受支持。我不能使用OPENQUERY因为数据太大而我需要应用运行时参数。
是否还有其他选项可以处理和使用EXEC AT命令的结果,而不需要先将它插入表中?
答案 0 :(得分:1)
我知道,没有办法直接加入Exec。在我看来,插入临时表是你最好的选择。即使你直接加入语法也会发生同样的事情,SQL Server需要将远程数据拉到本地,然后执行连接。
另一种选择可能是传递一个表参数并具有该输出。你可以使用sp_executesql。
答案 1 :(得分:0)
我会每隔5分钟左右使用sql代理等本地同步该表。然后我加入到本地表。
根据我的经验,使用链接服务器查询远程表永远不会给我最好的查询计划。如果可以,我会避免这样做。
答案 2 :(得分:0)
在使用它们之前,在本地缓存远程结果没有任何问题。平均而言,这种方法可以提供最佳性能。
此外,您可以尝试静态查询:
select *
from dbo.LocalTable lt
inner join RemoteDB.MyDB.dbo.Table1 rt on lt.Id = rt.Id
where rt.Col2 = 'Val2';
如果它不会马上工作,至少你可以试试REMOTE join提示。当然,通常它应该是最后的手段(暗示,我的意思)。