我發現查爾斯的答案(以及由maxcastaneda評論中的鏈接解決方法)非常有用。我遵循這種方法,它適用於我。我簡化了一下,並創建了以下查詢,以提供所有需要的同義詞創建。
作爲此片段的先決條件,原始數據庫和同義詞/別名數據庫必須位於同一臺服務器上,否則在使用鏈接服務器的情況下,您必須稍微修改它。 把它放到一個小sp中以自動更新同義詞應該相當容易。
USE <SYNONYMDB>
SELECT
'[' + TABLE_NAME + ']',
'[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']',
'IF EXISTS (SELECT * FROM sys.synonyms WHERE name = ''' + TABLE_NAME + ''') DROP SYNONYM ['+ TABLE_NAME + ']; CREATE SYNONYM [' + TABLE_NAME + '] FOR <ORIGINALDB>.' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' AS SynonymUpdateScript FROM <ORIGINALDB>.INFORMATION_SCHEMA.TABLES
不要忘了輸入你的Db名字< ...>斑點。
只需複製SynonymUpdateScript
列的內容並在同義詞DB中執行它,或者爲此任務創建一個存儲過程。
請注意,如果您有適當的視圖來引用表或其他沒有2部分命名約定的數據庫對象,則會出現問題。這些同義詞不起作用。您應該在原始對象/視圖中修復此問題。
我不相信你可以。目前的兩個答案都似乎缺少了這一點,並允許爲服務器實例提供一個別名,而「SYNONYM」僅適用於數據庫中的對象*。我不知道有任何方式來別名數據庫名稱。 –