這是我遇到的問題。我正在嘗試創建一個將部署到DEV,QA和PROD環境的存儲過程。由於對部署過程的嚴格要求,我必須確保我的過程在所有三種環境中相同,並且必須工作(當然!)。問題是這個proc在不同的數據庫中引用了一個表。在DEV和QA中,這是可以的,因爲數據庫位於同一臺服務器上,但是在PROD中,所討論的數據庫位於單獨的服務器上。以下是從我的PROC的代碼片段,試圖應對不同的環境問題:根據存儲過程當前運行的環境,我如何有條件地使用鏈接的服務器?
IF @@SERVERNAME<>'Production'
BEGIN
select distinct m.acct_id
from l_map m (nolock)
join #llist ll on ll.acct_id = m.acct_id
where ll.acct_id not in (select l_number from [OTHERDATABASE].[dbo].[OTHERTABLE] where lmi_status_code not in (select item from #ruleItems))
END
ELSE
BEGIN
select distinct m.acct_id
from l_map m (nolock)
join #llist ll on ll.acct_id = m.acct_id
where ll.acct_id not in (select l_number from [OTHERSERVER].[OTHERDATABASE].[dbo].[OTHERTABLE] where lmi_status_code not in (select item from #ruleItems))
END
我PROC是從不同的PROC中調用。當我直接測試上述邏輯時,我得到了我期望的結果。但是,當我嘗試在DEV或QA的上下文中測試它時(從頂級過程),我收到一條錯誤消息,指出無法找到[OTHERSERVER]。我不能(也不需要)在DEV和QA中創建鏈接服務器,但我需要能夠在PROD環境中使用鏈接服務器。有誰知道如何做到這一點?
這可能是我的情況的最佳解決方案。雖然我寧願不必說服管理層和部署部門說除了將不同的代碼部署到不同的環境之外別無他法,但我認爲他們會看到好處。謝謝@Damir和@Ben。 – 2011-03-17 18:06:02