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