2011-03-17 61 views
4

爲什麼要使用同義詞,syNONYMS IN SQL的優點?同義詞IN SQL的優點?

+0

可能重複[什麼是SQL Server 2008中使用同義詞?](http://stackoverflow.com/questions/1246006/what-is-the-use-of-synonym-in -sql-server-2008) – FistOfFury 2014-09-29 14:39:54

回答

6

它們只是數據庫內對象的簡寫名稱。例如,如果在名爲ProductionControl.Inventory.Products的數據庫中有名稱空間的表,則可以創建名爲Products的同義詞。它們在控制對存儲過程中其他數據庫的命名訪問時也很方便。如果您有SP引用其他數據庫中的表,則創建同義詞並使用它代替了同義詞的目標發生更改時的更多控制。這在您具有引用開發數據庫的SP的情況下非常有用,但在部署到生產時名稱不同。所以你只需更新同義詞就可以了。

+0

請不要成爲這些傻瓜之一,他們只是調用第一個別名'a',下一個'b',下一個'c',然後再次重新開始子查詢。它使它不可讀。 – 2011-03-18 11:34:45

2

從MSDN Understanding Synonyms

同義詞是一個數據庫對象 有以下用途:

  • 提供了一種替代的名稱爲另一數據庫對象,稱爲 作爲基礎對象,可以在 本地或遠程服務器上存在。

  • 提供了一個抽象層,它保護客戶端應用程序 免受對基礎對象的名稱或 位置所做的更改。

0

在一些企業系統中,你可能不得不處理過,你有沒有控制遠程對象。例如,由另一個部門或團隊維護的數據庫。

同義詞可以幫助您從SQL代碼中分離底層對象的名稱和位置。這樣,即使您想要的表移動到新的服務器/數據庫或重命名,您也可以對同義詞表進行編碼。

例如,我可以寫一個這樣的查詢:

insert into MyTable 
(...) 
select ... 
from remoteServer.remoteDatabase.dbo.Employee 

但隨後如果服務器或數據庫,模式或表更改它會影響我的代碼。相反,我可以創建遠程服務器的代名詞,使用同義詞代替:

insert into MyTable 
(...) 
select ... 
from EmployeeSynonym 

如果底層的對象改變位置或名稱,我只需要更新我的代名詞指向新的對象。的

http://www.mssqltips.com/sqlservertip/1820/use-synonyms-to-abstract-the-location-of-sql-server-database-objects/