2008-11-24 39 views
1

你將如何處理不同環境中的跨數據庫查詢。例如,db1-development和db2-development,db1-production和db2-production。在不同環境中使用不同數據庫名稱的跨數據庫查詢?

如果我想在從db2到db1的開發中進行跨數據庫查詢,我可以使用完全限定的名稱[db1-development]。[schema]。[table]。但是,如何維護不同環境之間的查詢和存儲過程? [db1-development]。[schema]。[table]在生產中不起作用,因爲數據庫名稱不同。

我可以看到搜索和替換爲一個可能的解決方案,但我希望有一個更優雅的方式來解決這個問題。如果有數據庫特定的解決方案,我正在使用SQL Server 2005.

回答

7

爲什麼dev和prod之間的數據庫名稱不同?顯然,如果它們是相同的,它們會是最簡單的。

如果它是共享的單個表格,那麼您可以在其上創建一個視圖 - 這隻需要您在切換到生產時更改該視圖。

否則,你會想create a SYNONYM的對象,並確保始終引用。您仍需要更改SYNONYM創建腳本,但我認爲,這可以在構建腳本中輕鬆完成。

+0

爲+1建立同義。我之前不知道那些...... :-) – 2011-04-13 10:32:08

0

由於這個原因,在開發和生產數據庫中使用不同的名稱是不現實的。在開發,生產和可選的環境中使用相同的db名稱,使您的SQL代碼更易於維護。但是,如果您真的需要,您可以通過視圖和動態SQL獲得創意。例如,你把實際的數據檢索查詢視圖裏面,然後你選擇這樣的:

declare @environment varchar(10) 
set @environment = 'db-dev' -- input parameter, comes from app layer 

declare @sql varchar(8000) 
set @sql = 'select * from ' + @environment + '.dbo.view' 
execute(@sql) 

但它遠遠漂亮......

相關問題