前一陣子的案子, 因為包含了3個模組, 各自有不同的資料庫,
但因為同一個案子, 想要共用相同的使用者資料及權限等資料~
要怎麼同時可以讓三個資料庫存取相同的資料呢?
因此, 認識到了SQL的同義字功能! 相當方便~ 在這裡也紀錄一下~
什麼叫同義字?
對在本機或遠端伺服器上的另一個資料庫物件 (稱為基底物件) 提供別名。 = 也就是幫資料庫物件取一個名字
同義字是SQL Server 2005以上版本才提供的功能
適用物件:
- Tables
- Views
- Stored procedures
- Functions無法對資料庫或是資料結構使用
使用語法:
CREATE SYNONYM [資料結構].[新物件名稱] FOR [伺服器].[資料庫].[資料結構].[原物件名稱](可跨不同資料庫)
額外補充:但若要設定跨資料庫的話,還須另外建立連結伺服器的設定:會使用到以下兩個Store Procedure
- sp_addlinkedserver
- 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
優點:
- 系統剛開始設計時若資料表名稱可能會變動使用同義字功能的話,只要重新設定同義字的對應即可
- 跨資料庫存取時不用寫一大堆語法: [伺服器].[資料庫].[資料結構].[原物件名稱]
注意事項:
- 同義字和基底物件之間只透過名稱繫結。也就是說若原本的基底物件由原本的資料表換成了view , 若名稱都一樣的話, 同義字還是可以使用的~
- 同義字的參考不受結構描述的約束。
- 基底物件的存在性、類型及權限,全部會延遲到執行階段再檢查。
- SYNONYM沒有ALTER語法,只能刪除後重新建置。
查詢已定義的同義字:
SELECT * FROM Sys.synonyms