2

我正在嘗試創建一個SQL作業,該作業位於我喜歡稱爲維護服務器的位置,其中包含有關所有其他服務器數據庫的詳細信息。所以我有一個存儲過程來收集我擁有的所有必需數據,並且此存儲過程現在位於MaintenanceServer.MaintenanceDB.pr_MyProcedure中。SQL Server 2008 R2 - 對鏈接服務器運行存儲過程

現在我想要做的是。我正在維護服務器上創建鏈接服務器,該服務器指向我想要維護的所有其他服務器。接下來在我的列表中是能夠對所有這些LinkedServers運行此過程pr_MyProcedure。我有超過25臺服務器來維護,我想要做的就是對它們運行該過程並將結果插入到我的本地MaintenanceDB中。

有人能指點我一個很好的方法來做到這一點嗎?另外我想聽聽這種方法的缺點。

感謝和乾杯!

編輯:

我也想保存我的其他服務器的所有主數據庫的SP和我維護服務器上遠程運行它們。然後我會用OPENQUERY()收集我需要的所有結果。但是,我不認爲我想要觸摸我的服務器列表上的所有主數據庫。請告訴我,如果這會比我上面說過的更好。

+0

一個好的方法來做到這它的一點。你還試過了什麼? –

+0

嗨!感謝您的迴應!完成這個任務的好方法就是我的意思,而不會太多地影響其他服務器的性能。我目前正在查看上面編輯部分的內容,但就像我說的,我不認爲我想和主人混淆。所以我問是否理論上可以做我上面的問題。如果是這樣,我想知道如何對這些鏈接的服務器運行查詢。謝謝! :) – Smiley

回答

1

這樣做的好方法是在目標服務器上運行SP,因爲它很好地模塊化。如果你想查詢遠程服務器,這將會更加痛苦。我不確定未記錄的sp_foreachdb是否處理鏈接的數據庫,如果不是的話,你是動態sql。

就像在構建一個字符串並用Exec(@somesql)調用它一樣,這將需要處理結果本身,因爲任何變量只會在exec內的作用域內。

就我個人而言,我會考慮顛倒這一切。讓每個服務器調用它自己的SP,然後調用維護盒上的SP來存儲結果。

+0

是的,這是我現在正在做的。我將SP存儲在所有服務器上以維護,並且我創建了另一個SP來將維護服務器上的結果合併。非常感謝!將你標爲答案... – Smiley

+0

笑臉給了你答案,但沒有upvote?好吧,我會照顧的! – Thronk

-2

EXEC [REMOTESERVER] .DatabaseName.DatabaseOwner.StoredProcedureName

'PARAMS' 實施例:

EXEC [REMOTESERVER] .DatabaseName.DatabaseOwner.StoredProcedureName 'PramValue'

+0

-1。這只是在遠程服務器上調用存儲過程的語法,它並不真正回答問題 – Gareth

+0

它確實回答標題中的問題,因此對於那些遵循鏈接但不需要更復雜的問題的答案,它承認沒有回答.. – Thronk

相關問題