2010-09-08 68 views

回答

1

最簡單的,如果你可以在系統上是(他們必須linked - 點擊鏈接服務器的鏈接信息):

EXEC [RemoteServer].DatabaseName.ObjectOwnerName.StoredProcedureName 

有關更多信息,請查看here

此外,爲了擺脫硬編碼服務器名稱,請參閱Paul的answer here涉及同義詞。

+0

遠程服務器名稱周圍的括號只有在名稱包含無效標識符字符時才需要,就像SQL中的其他名稱一樣。我在這裏工作的地方看到了很多,因爲我們有很多帶名稱連字符的服務器,這些服務器需要括號,所以人們最終將它們用於所有服務器名稱,這是不必要的醜事,海事組織。 – 2010-09-08 12:02:52

+0

請參閱我的答案,以便將服務器名稱從存儲過程中抽象出來。這樣你可以在不同環境之間移動代碼,而不必修改引用本身。 – 2010-09-08 12:03:54

+0

另外,如果問題存儲過程屬於數據庫所有者,倒數第二部分僅爲數據庫所有者(dbo)。在大多數設計中,它的確如此,但更正確的規範將是ObjectOwnerName。 – 2010-09-08 12:07:00

1

除了@Kyles的回答,您可以添加一個synonym來消除對較長/鏈接結構的需要。這將抽象引用的服務器。所以你可以將SP從UAT移到LIVE環境,代碼不必改變。在兩個環境中的同義詞將被設置在每個服務器上以正確引用該環境中的另一個服務器。

+0

同義詞應該是最佳實踐,硬編碼4部分名稱只是要求麻煩。 +1 – user404463 2010-09-08 12:06:00

+0

@ Daytona250:沒錯,但是知道功能是可用的,這始終是問題。只有一位新的DBA進入我以前的角色,向團隊強調了這一點。在此之前,我們認爲硬編碼鏈接是唯一的選擇。 – 2010-09-08 12:23:55

相關問題