簡體   English   中英

在不同環境中使用不同數據庫名稱的跨數據庫查詢?

[英]Cross-database queries with different DB names in different environments?

您將如何在不同的環境中處理跨數據庫查詢。 例如,db1-development和db2-development,db1-production和db2-production。

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

我可以將搜索和替換視為一種可能的解決方案,但我希望有一種更優雅的方法來解決此問題。 如果有特定於數據庫的解決方案,那么我正在使用SQL Server 2005。

為什么dev和prod之間的數據庫名稱不同? 顯然,如果它們相同,那將是最容易的。

如果它是一個共享的表,則可以在其上創建一個視圖-僅需在移至生產時更改該視圖。

否則,您將要為對象創建SYNONYM ,並確保始終引用該對象。 您仍然需要更改SYNONYM創建腳本,但是我認為可以很容易地在構建腳本中完成。

因此,在開發和生產數據庫中使用不同的名稱是不切實際的。 在開發,生產以及可選的驗收/問答環境中使用相同的數據庫名稱,使您的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)

但這遠非美麗...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM