同義字是SQL Server 的一個新對象它為一個已經存在的對象建立一個別名例如如果你有一個名為SalesHistoryFromArchiveFiscalBusinessYear的表你可以建立一個叫做Sales的同義字指向那個對象這意味著你不用寫下面這個查詢
SELECT * FROM SalesHistoryFromArchiveFiscalBusinessYear
而只要用以下代碼完成查詢
SELECT * FROM Sales
優點
前面的例子表明你可以用同義字給名稱較復雜的對象建立一個更加易懂的名稱從而簡化數據庫開發
同義字的主要優點在於你可以用它在基本的對象和同義字間建立一個抽象層例如你可以建立一個名為SalesHistory的同義字開發者在所有銷售報告中都要用到它這個同義字可以通過一個連接服務器引用一個本地視圖或表或一個遠程視圖或表與數據復制組合使用時這種同義字對象關聯可以成為一個非常強大的工具下面的例子說明了這個問題
實例
由於業務和可擴展性需求不斷擴張你認為最好是把SalesHistory表從當前的Inventory數據庫中刪除把它放到一個名為SalesData的獨立數據庫中在Inventory數據庫中有許多代碼引用SalesHistory表多數代碼都是簡單的查詢僅從SalesHistory表中讀取數據由於項目最終期限很快就臨近因此很難改變所有現有的代碼讓其引用新數據庫中的表以下我來說明如何使用一個同義字顯著縮短開發時間
假設你已經把SalesHistory表復制到新的SalesData數據庫中並對Inventory數據庫中當前的SalesHistory表進行了重命名(我總是喜歡首先重命名我打算刪除的表這使我有機會發現系統中由刪除表造成的錯誤)
重命名SalesHistory表後你可以建立一個引用你已經放到新數據庫中的SalesHistory表的同義字其腳本如下
USE Inventory
GO
CREATE SYNONYM SalesHistory
FOR SalesDatadboSalesHistory;
GO
這個同義字建立一個指向新SalesData數據庫的SalesHistory表的指針但是因為同義字位於Inventory數據庫中且名為SalesHistory那麼任何對SalesHistory同義字執行的查詢或DML語句實際上是對SalesData數據庫的SalesHistory表執行操作
Tim Chapman是肯塔基州路易維爾市一家銀行的SQL Server數據庫管理員他有超過年的IT行業經驗他還通過了微軟SQL Server 和SQL Server 的認證
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22208.html