2011年3月25日 星期五

SQL 建立遠端資料庫資料表到本地 Table 或 VIEW

參考
--
當在撰寫程式的時候,有時會因為一些因素,導致原本所有資料表(Table)都使用同一台伺服器的資料庫,變成某些資料表要用到其他台伺服器中的資料表。這麼一來不但程式得大改變,而且很難掌握是否還有其他沒注意到的問題。關於這個問題,其實很簡單,只要將遠端(新)伺服器資料庫中所用到的資料表,以檢視(view)方式建立在原本的資料庫上,這麼程式改寫的部分就僅剩更改名稱,甚至用點技巧連程式都不用改了。

想要將遠端伺服器資料庫中的資料表變成本地資料庫的VIEW,首先要先用系統預存程序來完成建立「LinkedServer」的動作

USE Local_DB
EXEC sp_addlinkedserver @server = '192.168.100.200', @srvproduct = N'SQL Server'
EXEC sp_addlinkedsrvlogin @rmtsrvname = '192.168.100.200' , @useself = false, @rmtuser = 'remote_db_account', @rmtpassword = 'remote_db_password'

利用 sp_addlinkedserver 跟遠端資料庫SQL建立關連
利用 sp_addlinkedsrvlogin 設定登入遠端資料庫的帳號、密碼等訊息

Local_DB 換成你程式中原本使用的資料庫名稱
192.168.100.200 當然要換成你遠端伺服器主機的IP
rmtuser 換成遠端資料庫可登入SQL的帳號
rmtpasswword 換成遠端資料庫可登入SQL帳號的 密碼
其他的就照用囉



建立連線與設定遠端登入帳號後,就可以來 CREATE VIEW 了


CREATE VIEW Remote_view1
AS
SELECT *
FROM [192.168.100.200].Remote_DB.dbo.Remote_Table


嚴格的來說 SELECT statement格式為
SELECT * FROM [IP 或 Server_name].Remote_DB_name.DB_Owner_name.Remote_Table_Name。

一切OK後,就可以在你原本使用的資料庫中看到你新增的檢視(VIEW)了。

啥?執行正常卻看不到檢視表,別著急把 SQL Management 關掉重新執行一次,應該就可以看到了(因為有時重新整理似乎對新增的內容還是顯示不出來)

新增 Linked Server 這個動作做一次就OK了,也無法讓你做第二次,因為系統會告訴你這台 Linked Server 已經存在。

那如果寫錯卻已經存在怎麼辦,請用

EXEC sp_dropserver '192.168.100.200'

將已建立的 Linked Server DROP 掉吧。

如果不想手動輸入這些程式碼,你也可以在 SQL 2005 下的

「伺服器物件」→「連結的伺服器」去設定他

沒有留言:

張貼留言