我有以下查詢,這從Oracle數據庫中提取數據到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完成此任務的最佳策略是什麼?
您不能爲變量指定多個值,因爲該@ID變量的select查詢顯示它只有一個值。您已經將變量正確地定義爲字符串,但是您不認爲您需要在該查詢中進行更多操作以將所有值選擇爲逗號分隔值嗎?簡單的普通選擇將覆蓋之前存儲在變量中的值,並且只會將最後一個值作爲變量的最終結果。 –
我知道這個策略是有缺陷的,但這是我得到的最好的。任何指針歡迎。 – user1893148