Sql-Server-2016
如何通過 Remote Query showplan 運算符將動態 SQL 開放查詢儲存的 proc 呼叫插入到伺服器 A 上的臨時表中?
我必須通過動態 SQL 使用開放查詢從伺服器 A 呼叫伺服器 B 上的儲存過程,並將結果插入到伺服器 A 上創建的臨時表中。我在執行計劃中註意到,它使用遠端掃描顯示計劃運算符。我知道 Remote Query showplan 運算符何時可能更有效,但我不確定在這種情況下是否可能?(遠端儲存過程返回大約 150 萬行。)
這是我在本地伺服器 A 上的查詢:
CREATE TABLE #FinalResults (Field1 INT, Field2 VARCHAR(100)) DECLARE @DynamicSQL NVARCHAR(MAX) = '' SELECT @DynamicSQL = @DynamicSQL + ' SELECT Field1, Field2 FROM OPENQUERY(MyRemoteServerB, ''EXEC sp_MyRemoteStoredProcedure'') ' INSERT INTO #FinalResults EXEC sp_ExecuteSQL @DynamicSQL;
這是我在遠端伺服器 B 上的遠端過程 sp_MyRemoteStoredProcedure 中的查詢:
CREATE TABLE #Results (Field1 INT, Field2 VARCHAR(100)) INSERT INTO #Results SELECT Field1, Field2 FROM Database1.dbo.Table1 WHERE DateField >= 'Date1' AND DateField < 'Date2' UNION SELECT Field1, Field2 FROM Database2.dbo.Table1 WHERE DateField >= 'Date1' AND DateField < 'Date2' SELECT Field1, Field2 FROM #Results
我注意到在執行計劃中,它使用了 Remote Scan showplan 運算符。我知道 Remote Query showplan 運算符在可能的情況下會更有效…
遠端掃描操作員本身並沒有什麼低效的地方。例如,它與 一起使用
BULK INSERT
,這是非常有效的。遠端掃描的性能取決於它背後的東西,在這種情況下是連結伺服器、各種驅動程序、網路等。遠端查詢運算符可以更有效,例如,如果可以將謂詞或聚合操作推送到遠端伺服器,而不是檢索所有行並在本地完成工作。
…但我不確定在這種情況下是否可能?
除了使用遠端掃描從 T-SQL 遠端儲存過程呼叫中讀取數據外,別無選擇。