1. 程式人生 > 其它 >SQLServer中同義詞Synonym的用法

SQLServer中同義詞Synonym的用法

以前一直認為SqlServer中的同義詞(Synonym)沒有什麼用處,所以也一直沒有去查它的語法格式。今天碰到一個問題,用Synonym來解決再好不過了。問題是這樣子的,我的系統中用到了多個數據庫,然後因為各個資料庫中的某些資料需要同步,所以我就在其中的某個資料庫中的表中新增觸發器,來同步更新其它資料庫中的資料。舉例如下:
有兩個資料庫A和B,分別有表a1與b1,然後我在表a1建立了觸發器來更新表b1中的資料,觸發器大概如下:

create trigger tu_a1 after update
as
……
update t2 set t2.欄位=t1.欄位
from inserted t1,B..b1 t2 where t1.欄位=t2.欄位


反正就是,我在a1的觸發器中用到了B..這種方式來引用資料庫B中的物件。

然後問題就來了,今天老闆說在同一臺伺服器上要同時安裝多個系統。那麼就需要把資料庫A和資料庫B複製多份,當然複製出來的資料庫名字就不能叫A和B了,可能叫A1與B1。那麼A1中的觸發器就不能更新B1中的資料了,因為A1中的觸發器是使用B..這種方式來引用的。這種情況下,必須將全部的B..全部換成B1..。這樣,如果這樣引用的地方多了,那就是一場災難了。

使用同義詞Synonym就能很好的解決這個問題,首先大概說一下同義詞(Synonym)的作用。
同義詞

:就是定義一個字串名稱,用來代替一個有意義的引用物件。

在上例中,我可以用Bb1這個字串來代代B..b1,那麼以後我要操作B..b1這表,就可以直接操作Bb1,與操作前者一樣的效果。那麼,在部署多套系統時,只需修改一下新資料庫中這個同義詞的引用就可以了,觸發器根本不需要修改。

下面是“建立,刪除,引用”同義詞的sql語句示例,注意,同義詞不提供修改的功能,所以一旦建立了,就只能刪除再重建,是不能夠修改的。

建立同義詞
create synonym Bb1
from B..b1

使用同義詞
insert into Bbl(……) values (……)

引用同義詞
select * from Bbl

刪除同義詞
drop synonym Bb1

查詢所有同義詞
select * from sys.synonyms


注意:只有SqlServer2005及以後的版本中才有Synonym。ong>。