SQL 同義字(Synonym)

  • 3192
  • 0

前一陣子的案子, 因為包含了3個模組, 各自有不同的資料庫,

但因為同一個案子, 想要共用相同的使用者資料及權限等資料~

要怎麼同時可以讓三個資料庫存取相同的資料呢?

因此, 認識到了SQL的同義字功能! 相當方便~ 在這裡也紀錄一下~

什麼叫同義字?

對在本機或遠端伺服器上的另一個資料庫物件 (稱為基底物件) 提供別名。 = 也就是幫資料庫物件取一個名字

同義字是SQL Server 2005以上版本才提供的功能

適用物件:

  • Tables
  • Views
  • Stored procedures
  • Functions無法對資料庫或是資料結構使用

使用語法:

CREATE SYNONYM [資料結構].[新物件名稱] FOR [伺服器].[資料庫].[資料結構].[原物件名稱](可跨不同資料庫)

額外補充:但若要設定跨資料庫的話,還須另外建立連結伺服器的設定:會使用到以下兩個Store Procedure 

  1. sp_addlinkedserver 
  2. sp_addlinkedsrvlogin

使用範例:例如我們想要使用[伺服器][資料庫].[dbo].[TABLE1] 並為它建立別名:TABLE1

新增: CREATE SYNONYM [dbo].[TABLE1] FOR [伺服器][資料庫].[dbo].[TABLE1]
刪除: DROP SYNONYM [dbo].[TABLE1]

或是透過工具新增也是可以的~
建立後就如同操作本機資料表一樣方便使用~
可使用以下陳述式:
SELECT、INSERT、UPDATE、DELETE、EXECUTE、子 SELECT

SELECT * FROM TABLE1

優點:

  1. 系統剛開始設計時若資料表名稱可能會變動使用同義字功能的話,只要重新設定同義字的對應即可
  2. 跨資料庫存取時不用寫一大堆語法: [伺服器].[資料庫].[資料結構].[原物件名稱]
     

注意事項:

  1. 同義字和基底物件之間只透過名稱繫結。也就是說若原本的基底物件由原本的資料表換成了view , 若名稱都一樣的話, 同義字還是可以使用的~
  2. 同義字的參考不受結構描述的約束。
  3. 基底物件的存在性、類型及權限,全部會延遲到執行階段再檢查。
  4. SYNONYM沒有ALTER語法,只能刪除後重新建置。

查詢已定義的同義字:

SELECT * FROM Sys.synonyms