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