跨服務器,跨數據庫查詢並不是什么新鮮事,不過之前在工作中看到一段代碼,之前也沒有接觸過數據庫同義詞,發現挺方便的。代碼示例類似這樣:
代碼很普通,奇怪之處在於A 表在服務器ServerA的DatabaseA中,而B表在服務器ServerB的DatabaseB中。於是我第一反應是linked server,但可以這樣寫嗎?沒遠程Server 的ip,沒數據庫名,居然也可以連表?於是開始Google。
之后得出結論,確實使用了linked server,但加上了同義詞 synonym。以下開始練習:
1.首先建了數據庫TestA,里面有表UserInfo,里面有一條記錄,:
2.然后建數據庫TestB,表RoleInfo,也只有一條記錄:
先直接跨數據庫查詢,成功(這里我在本機在測試,因此就不加上跨Server了。如果需要跨Server測試,也是一樣,只需要在數據庫前加Server 示例地址就好)!得出結果:
看,sql 腳本需要指定數據庫名,如果跨了服務器,還需要指定IP,這么麻煩,也易出錯,需要改進:
3.先添加linked server:
4.給需要連接的表使用剛創建的linked server 創建同義詞,
5.最后一步,可以直接連表查詢啦:
參考地址:
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql?view=sql-server-2017
https://docs.microsoft.com/en-us/sql/relational-databases/synonyms/synonyms-database-engine?view=sql-server-2017