瞭解同義字
同義字是具有下列用途的資料庫物件:
對在本機或遠端伺服器上的另一個資料庫物件 (稱為基底物件) 提供別名。
提供抽象層來保護用戶端應用程式,避免變更基底物件的名稱或位置。
例如,以位於伺服器 Server1 上 Adventure Works 的 Employee 資料表為例。若要從另一個伺服器 Server2 參考此資料表,用戶端應用程式使用的名稱必須包含四個部份:Server1.AdventureWorks.Person.Employee。另外,若是資料表的位置已變更 (例如,變更至另一個伺服器),則必須修改用戶端應用程式以反映該變更。
若要解決這些問題,您可以在 Server2 建立同義字 EmpTable,來代表在 Server1 的 Employee 資料表。現在,用戶端應用程式只需要使用單一部份的名稱 EmpTable 來參考 Employee 資料表。此外,如果 Employee 資料表的位置變更,您必須修改同義字 EmpTable,指向 Employee 資料表的新位置。因為沒有 ALTER SYNONYM 陳述式,首先您必須卸除同義字 EmpTable,再以相同的名稱重新建立同義字,但要將同義字指向 Employee 的新位置。
同義字放在結構描述中,如同結構描述中的其他物件一樣,同義字的名稱也必須是唯一的。您可以為下列資料庫物件建立同義字:
組件 (CLR) 預存程序 |
組件 (CLR) 資料表值函數 |
組件 (CLR) 純量函數 |
組件 (CLR) 彙總函數 |
複寫篩選程序 |
擴充預存程序 |
SQL 純量函數 |
SQL 資料表值函數 |
SQL 內嵌資料表值函數 |
SQL 預存程序 |
檢視 |
資料表1 (使用者自訂) |
1 包含本機和全域暫存資料表
[!附註]
不支援函數基底物件的四部份名稱。
同義字不可為另一個同義字的基底物件,而且同義字不可以參考使用者自訂的彙總函數。
同義字和基底物件之間只透過名稱繫結。基底物件的存在性、類型及權限,全部會延遲到執行階段再檢查。因此,和原始基底物件名稱相同的另一個物件,可以修改、卸除或卸除並取代基底物件。例如,以同義字 MyContacts 為例,此同義字參考 Adventure Works 中的 Person.Contact 資料表。如果 Contact 資料表被卸除並由名稱為 Person.Contact 的檢視所取代,則 MyContacts 會變成參考 Person.Contact 檢視。
同義字的參考不受結構描述的約束。因此,隨時可以卸除同義字。不過,如果卸除同義字,已卸除的同義字有可能會留下懸吊參考。只有等到執行階段才會發現這種參考。
同義字和結構描述
如果預設的結構描述不是由您擁有,但您想要建立同義字,則必須使用您擁有的結構描述名稱來限定同義字名稱。例如,如果您擁有結構描述 x,但預設結構描述是 y,且您使用 CREATE SYNONYM 陳述式,則必須以結構描述 x 做為同義字名稱的前置詞,而非使用單一部份的名稱來命名同義字。如需如何建立同義字的詳細資訊,請參閱<CREATE SYNONYM (Transact-SQL)>。
授與同義字的權限
只有同義字擁有者、db_owner 的成員或 db_ddladmin 的成員,才可授與同義字的權限。
您可以 GRANT、DENY、REVOKE 同義字上的任何或所有下列權限:
CONTROL |
DELETE |
EXECUTE |
INSERT |
SELECT |
TAKE OWNERSHIP |
UPDATE |
VIEW DEFINITION |