由淺入深講解SQL Server 2005數(shù)據(jù)庫(kù)中Synonym的使用方法
1.Synonym的概念
Synonym(同義詞)是SQL Server 2005的新特性。推出已經(jīng)有幾年的時(shí)間了。我們可以簡(jiǎn)單的理解Synonym為其他表的別名。本文中使用Northwind數(shù)據(jù)庫(kù)為示例:
Create Synonym MyCustomers FOR Customers
為Customers表創(chuàng)建一個(gè)Synonym,叫MyCustomers。 我們可以把這個(gè)MyCustomers當(dāng)作一個(gè)普通的表,可以對(duì)它進(jìn)行查詢,更新,刪除和插入。例如:
查詢: Select * from MyCustomers.
插入: Insert into MyCustomers (CustomersID, CompanyName) values ('Tom', 'MS')
所有的操作,和普通的表沒(méi)有區(qū)別。
2.Synonym的實(shí)際應(yīng)用
在你的程序發(fā)布的時(shí)候,你突然發(fā)現(xiàn)你需要更改某個(gè)表名,或字段名。而你的程序已經(jīng)不可能修改。這時(shí),怎么辦呢?那就創(chuàng)建Synonym吧。當(dāng)然,在sql2000時(shí)代,你可以使用view來(lái)做這個(gè)事情,或sprocs或udf等。但Synonym有其它所不能的功能,那就是跨數(shù)據(jù)庫(kù),跨服務(wù)器。
3.Synonym在同一服務(wù)器上的不同數(shù)據(jù)庫(kù)
對(duì)于同一服務(wù)器上的不同數(shù)據(jù)庫(kù),我們可以使用Synonym,將其他數(shù)據(jù)庫(kù)中的表或view或sprocs及udf在本數(shù)據(jù)庫(kù)中映射別名。這樣,就可以不用更改連接字符串,而在當(dāng)前對(duì)話數(shù)據(jù)庫(kù)的情況下,獲取其他數(shù)據(jù)庫(kù)的數(shù)據(jù),并對(duì)它進(jìn)行,查詢,更新,刪除和插入工作。
先假設(shè)已經(jīng)存在Northwind數(shù)據(jù)庫(kù),然后,再建一個(gè)數(shù)據(jù)庫(kù)。我們?cè)谛碌臄?shù)據(jù)庫(kù)上,創(chuàng)建Customer表的Synonym.
Create Synonym MyCustomers For Northiwind.dbo.Customers
需要大家注意的是,后面需要寫(xiě)清那個(gè)數(shù)據(jù)庫(kù),那個(gè)表,中間dbo為表的owner.
然后,運(yùn)行 Insert into MyCustomers (CustomersID, CompanyName) values ('Tom', 'MS')
和Select * from MyCustomers. 看看是不是真的像普通表那樣。
4.Synonym在不同服務(wù)器上的不同數(shù)據(jù)庫(kù)
假設(shè)一下,我們有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器叫SqlTest。上面有個(gè)數(shù)據(jù)庫(kù)叫Northwind。我們本地還有一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器。叫LocalTest. 其上面有一數(shù)據(jù)庫(kù)叫Northwind或其他什么的。突然有一天,為了使本地的數(shù)據(jù)庫(kù)跑的更快,本地的老數(shù)據(jù)被移到SqlTest上去了,本地只保存最近更新的。那老數(shù)據(jù)總還是要用的,怎么樣實(shí)現(xiàn)不同服務(wù)器之間的數(shù)據(jù)操作呢?那就用Synonym吧。如下:
Create Synonym MyCustomers For SqlTest.Northiwind.dbo.Customers
你可能會(huì)發(fā)現(xiàn),只是在上面這個(gè)例子的基礎(chǔ)上,加了個(gè)機(jī)器名字。就這么簡(jiǎn)單?不是吧?那臺(tái)服務(wù)器還不一定知道用戶名和密碼呢。對(duì),是的,還要在本地服務(wù)器上,注冊(cè)一下遠(yuǎn)程的服務(wù)器。使用sp_addlinkedserver,此存儲(chǔ)過(guò)程定義如下所示:
Exec sp_droplinkedsrvlogin davalsql2005,NullExec sp_dropserver davalsql2005 EXEC sp_addlinkedserver@server='davalsql2005',--被訪問(wèn)的服務(wù)器別名@srvproduct='',@provider='SQLOLEDB',@datasrc='D12' --要訪問(wèn)的服務(wù)器EXEC sp_addlinkedsrvlogin 'davalsql2005', --被訪問(wèn)的服務(wù)器別名'false', NULL, 'sa', --賬號(hào)'123456' --密碼Select * from MyCustomers
