2017-03-16 39 views
0

從我們的SQL服務器,我可以執行以下代碼來執行的程序連接鏈接服務器在Oracle服務器上得到一些數據:如何動態指定鏈接的服務器,以解決在過程

EXEC ('BEGIN Get_Data(?,?,?,?); 
     END;', 
     @Id, 
     @Status OUTPUT, 
     @Customer OUTPUT, 
     @Name OUTPUT) at OraTestServer; 

OraTestServer是鏈接服務器的定義名稱。現在我想使用動態鏈接的不同服務器,我該如何實現這一目標?

我已經嘗試以下,但不工作:

EXEC('EXEC (''BEGIN Get_Data(?,?,?,?); 
      END;'', 
      @Id, 
      @Status OUTPUT, 
      @Customer OUTPUT, 
      @Name OUTPUT) at '+ @LinkedServer + ';') 
+0

你把參數的動態sql – LONG

+0

https://msdn.microsoft內。 com/en-us/library/ms188001.aspx – manderson

+0

@manderson即使不嘗試使用動態鏈接服務器,我甚至無法使sp_executesql正常工作。第一次調用如何使用sp_executesql? – Nike

回答

1

試試這個,

EXEC (
'EXEC (''BEGIN Get_Data(?,?,?,?); 
     END;'', '+ 
     @Id+','+ 
     @Status+ ' OUTPUT,'+ 
     @Customer+ ' OUTPUT,'+ 
     @Name+ ' OUTPUT) at ' [email protected] 
) 
+0

字符串連接可能不是100%正確的,但是您需要做的是將參數從字符串連接中取出,否則,sql會將其作爲字符串執行,例如'@ parameter'而不是您分配給的實際值@parameter – LONG

+0

I嘗試過,但該解決方案無法正常工作。那麼如何執行它並仍然能夠獲得輸出'@參數'填充是個大問題。 – Nike

+0

嘗試聲明'@SQL NVARCHAR(MAX)'並將外部'EXEC'中的所有內容都設置爲@SQL,嘗試'print(@SQL)',檢查結果是否是正確的查詢 – LONG

相關問題