我有以下查询,它将数据从 Oracle DB 提取到 SQL Server 2005:
SELECT *
FROM (
SELECT *
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT FOO, BAR, FROM TABLE
WHERE ID IN(' + @IDs + '
')) AS TMP
WHERE SOME_ID IN
(SELECT DISTINCT ID
FROM LOCALTABLE);
但是,运行时非常长,因为来自链接服务器的查询会产生大量行。我只对这些行中的一小部分感兴趣,但是限制我的查询的条件保存在目标数据库中。
通过关于 SO 的另一篇文章,我看到我可能会在动态 sql 中使用一个变量,如下所示:
DECLARE @IDs AS NVARCHAR(100);
SET @IDs = (SELECT ID FROM LOCALTABLE)
DECLARE @sql AS NVARCHAR(3000);
SET @sql = 'SELECT * FROM OPENQUERY(LINKEDSERVERNAME, ''SELECT FOO, BAR, FROM TABLE
WHERE ID IN(' + @IDs + '))'
EXEC sp_executesql @sql
但是,我显然不能为变量分配多个值,因此结果集仅包含放置在 @IDs 中的最终 ID 的结果。
为本地表中的所有不同 ID 完成此任务的最佳策略是什么?