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