我已经处理了一段时间的查询填充了7个临时表,直到由于使用TempTables时OPENQUERY给出以下错误,我不得不将它们替换为CTE(7个CTE):
元数据发现仅在分析单语句批处理时支持临时表。
当我运行带有临时表的查询时,运行时间为:
7:50
当我使用CTE运行查询时,运行时间为:
15:00
几乎翻倍的时间!是否有其他替代OPENQUERY的方法可能会使它运行得更快,同时又可能保留我的临时表?
当前执行查询:
SET @XSql = 'SELECT * FROM OPENQUERY([server], ''' + REPLACE(@QSql, '''', '''''') + ''')'
EXEC(@XSql)
我以此为参考:Stored Procedure and populating a Temp table from a linked Stored Procedure with parameters
并且需要一个最佳的解决方案。
欢迎提出建议!
答案 0 :(得分:1)
您可以使用EXEC ... AT SERVER
吗?这对我来说很好:
EXEC ('CREATE TABLE #TestTable1 (ID int); CREATE TABLE #TestTable2 (ID int); SELECT * FROM #TestTable1, #TestTable2;') AT LinkedServer;
答案 1 :(得分:0)
我已经解决了问题,我只是将执行查询替换为以下内容:
EXEC (@Qsql) AT [servername]
这支持Temp Tables,并且摆脱了我遇到的任何其他性能问题。
希望这会有所帮助。