傳統參考遠端物件需完整四部件名稱:Server.Database.Schema.Object。程式碼散佈各處,遷移/重構時修改極其困難。
同義詞 提供單一名稱別名,對應任意層級的基底物件,支援延遲綁定 (建立時基底物件可不存在)。
CREATE SYNONYM [schema_name.]synonym_name FOR object_name;
-- object_name 可為四部件名稱
-- 1. 簡化本地跨 Schema 參考
CREATE SYNONYM ProdCat FOR AdventureWorks.Production.ProductCategory;
SELECT * FROM ProdCat; -- 等同 SELECT * FROM AdventureWorks.Production.ProductCategory
-- 2. 封裝連結伺服器遠端資料表
CREATE SYNONYM RemoteOrders FOR [LINKED_SRV].Northwind.dbo.Orders;
SELECT CustomerID, OrderDate FROM RemoteOrders WHERE OrderDate > '2023-01-01';
-- 3. 隔離資料庫重構
-- 原: SELECT * FROM LegacyDB.dbo.OldTable
CREATE SYNONYM CurrentData FOR LegacyDB.dbo.OldTable;
-- 遷移後僅修改同義詞定義:CREATE SYNONYM CurrentData FOR NewDB.dbo.NewTable
-- 所有應用程式碼零修改
SELECT、子查詢INSERT、UPDATE、DELETEEXECUTE (預存程序/函數)不可用於 DDL:ALTER TABLE、CREATE INDEX、DROP TABLE 等需直接操作基底物件。
CREATE SYNONYM 權限。GRANT/DENY/REVOKE 權限 (SELECT, EXECUTE 等)。-- 查看同義詞定義
SELECT name, base_object_name FROM sys.synonyms;
-- 刪除
DROP SYNONYM [schema_name.]synonym_name;
-- 重新命名 (實為刪除重建)
DROP SYNONYM OldName; CREATE SYNONYM NewName FOR ...;
syn__ (如 syn_HR_Employees)。