假設我有兩個名爲DB1和DB2的數據庫。在DB1中,有一個名爲Student的表,在DB2中,有一個名爲SP1的存儲過程。在SP1中,我使用以下查詢選擇學生表的數據:如何將DB1的請求重定向到DB2
從DB1.dbo.Student中選擇*。
我有300多個存儲過程具有上述的跨數據庫通信。現在,我想從數據和模式角度將數據庫從DB1更改爲與DB1相同的DB3。 爲此,我還必須修改具有完全限定數據庫名稱的所有300個存儲過程。現在,查詢將可能如下:
SELECT * FROM DB3.dbo.Student
我不想改變所有的存儲過程,現在來點DB3,也不想改變我在存儲過程中編寫的查詢動態SQL(我知道這可以通過創建動態SQL來完成)。
如果我們運行DB1.dbo.Student,它可能會重定向到DB3.dbo.Student。任何中間層或任何SQL設置。
這對我來說是非常大的幫助。提前致謝 !!
感謝您的回答愛德蒙..我不想再做硬代碼。我需要一些方法來調用DB3而不更改我的存儲過程。 – MehraG
不幸的是,我知道傳遞數據庫作爲參數的唯一方法是將所有的程序重寫爲動態sql,這將是一個更糟糕的維護噩夢。我仍然會推薦使用同義詞。雖然不是動態的,但您可以更新同義詞而不影響其他存儲過程或視圖。創建可以自動刪除並重新創建同義詞的代碼也更容易。我在原始答案中添加了一個示例。 –