SQL Visual Studio 在發布配置文件中查找和替換
我們在 Visual Studio 數據庫項目 (SSDT) 中有原始碼控制。為了進行跨數據庫引用,我們在下面的項目引用中使用了類似的內容。
我們需要項目引用,因為其他數據庫可以在我們公司的兩個選項之間進行選擇。大多數時候,它的 90% 數據庫 A 和 10% 數據庫 B。
這讓開發者很頭疼,用$和括號寫程式碼
$$ $$. 有什麼解決方法嗎?例如,假設我在 DatabaseA 預設中編寫程式碼,
from [$(OtherDatabase)].dbo.PurchaseOrder from DatabaseA.dbo.PurchaseOrder
有沒有辦法擁有多個發布配置文件腳本,我可以編寫一個發布配置文件腳本來查找對數據庫 A 的所有引用,並用數據庫 B 替換嗎?也許就像一個簡單的 Ctrl-查找和替換?如何將這種命令、批處理文件、儲存過程或 Powershell 合併到發布配置文件中?
尋找有效途徑;我可以在下面使用這個答案,但是 DatabaseA 需要駐留在同一台伺服器中,然後我會刪除並重新創建可能不是最佳的。
意識到試圖避開這條路線的同義詞,並進行查找/替換
在編寫跨數據庫程式碼時,我更喜歡避免三部分名稱引用。您所描述的可變性
$(OtherDatabase)
是我避免使用三部分名稱的確切原因。總有一天,DatabaseA
將被重命名為DatabaseC
並且不得不更新程式碼中的一堆引用。就您而言,您可以進行新建構,但這仍然很痛苦。相反,在項目中為每個跨數據庫引用創建同義詞。在同義詞中,您將對每個對象使用一次 SSDT 項目引用變數:
CREATE SYNONYM dbo.PurchaseOrder FOR [$(OtherDatabase)].dbo.PurchaseOrder;
然後,每次引用跨數據庫對象時,只需要使用兩部分名稱即可。開發人員不應使用 the
[$(OtherDatabase)]
或占位符DatabaseA
引用進行查找和替換。FROM dbo.PurchaseOrder
這有一個額外的好處,即所有程式碼在數據庫的不同迭代中總是相同的。唯一不匹配的對像類型將是同義詞。無需檢查程式碼,您只需查詢
sys.synonyms
DMV 即可確定dbo.PurchaseOrder
點在哪裡。在此查詢中,
name
將返回由兩部分組成的名稱 (exPurchaseOrder
),base_object_name
並將返回由三部分組成的名稱 (exDatabaseA.dbo.PurchaseOrder
):SELECT name, base_object_name FROM sys.synonyms;
如果您有一個需要從 DatabaseA 重新指向 DatabaseB 的數據庫,您可以簡單地通過一系列
DROP SYNONYM
&CREATE SYNONYM
語句重新指向同義詞,而無需ALTER
執行過程/視圖/函式/觸發器的語句。