2014-02-18 61 views
4

在從另一個數據庫中訪問數據是我的架構細節:在存儲過程

  • DB_A:schema_1,schema_2,schema_3
  • DB_B:schema_3

在schema_3接入資源的一些程序(表,view,sp)from schema_1和schema_2。

schema_3中的所有過程在這兩個dbs上都是相同的。 如何從schema_3訪問schema_1的dll

現在我可以在我的程序中硬編碼DB_A,但是當我將代碼移動到客戶端計算機時,它會產生一個問題,因爲DB_A可能不一樣(原因是客戶端是miser並且有QA,Dev和Prod同一臺機器)。

第二個選項是獲取DB_A名稱作爲參數,但它會使所有schema_3 SP動態(因爲我沒有得到任何方法來訪問像@ DBName.schema_name.ResourceName之類的東西)。

第三個選項是創建鏈接服務器,由於與第一個相同的原因,這再次無法解決我的問題。

任何想法如何繼續,我不希望我的程序是動態的,因爲80%是直的。

編輯開始:

因此,我可以再說一遍,因爲我有與具有資源(表/視圖/模式)的數據庫的多個數據庫,其需要被共享,然後具有其它數據庫(一個或多個),其具有從共享數據庫和自我數據庫計算數據的存儲過程。

共享數據庫名稱在所有環境中不會保持不變,我想更改它們(特定於環境)。我已經提出了一個解決方案,我將爲所有共享資源創建同義詞,並且所有過程都將使用它們,這樣他們都指的是來自第一個數據庫的共享資源。

對於每次安裝,我需要修改同義詞定義以反映正確的共享數據庫名稱。有沒有任何SYNONYM對於數據庫名稱,這種方式我將有更少的同義詞處理。

回答

1

那麼最好的選擇我發現如下。

創建Synonym(獨立數據庫DB_B)爲單個對象(在共享數據庫DB_A)在相同的架構中具有相同的名稱。這樣你的現有程序不需要改變,並且可以按需要工作。 Synonym就此提供了很好的參考。我將很快創建一個應用程序,以便爲這些情況創建同義詞。

CREATE SYNONYM DB_B.schema_1.proc_1 FOR DB_A.schema_1.proc_1 
0

可以在DB_A運行您的程序,並創建DB_ADB_B一個觀點:

create view dbo.vw_B_Schema_3 
as 
select * 
from DB_B.dbo.Schema_3 

你不得不創建視圖的三個版本(開發,QA,PROD)但有一種觀點將是唯一的區別:過程定義可以保持相同。

+0

Schema_1,Schema_2,Schema_3不是資源而是架構名稱,如DBO,員工等DB_B是不固定的第二件事,它的名字可以在不同的環境動態變化。 –

+0

我找到了對象的同義詞,它們是類似於數據庫名稱的同義詞 –

0

如果DB_A和DB_B位於同一臺服務器上,請確保您的登錄名具有兩個數據庫的權限。

現在,使用[database]。[schema]。[對象],當你使用其他數據庫的對象

例如:我有兩個數據庫,( 「服務支持」, 「內聯網」)

從heldesk到Intranet

create view dbo.users 
as 
select login, name, lastname 
from intranet.dbo.user // [database].[schema].[object] user is a table in dbo schema from intranet database. 
where status = 1 
; 
+0

我們知道該解決方案,但問題不僅在於表/視圖,還包括從其他數據庫執行過程。因此,對於表的Synonym的任何替代方法,我們都有表/程序/視圖的同義詞[link](http://technet.microsoft.com/zh-cn/library/ms177544.aspx)。因此,我們希望有一些全局變量保存數據庫名稱,我們可以在基於環境的基礎上更改它,並從那裏獲取數據或從中執行過程。 –