在我們做數據庫程序開發的時候,經常會遇到這種情況:需要將一個數據庫服務器中的數據導入到另一個數據庫服務器的表中。通常我們會使用這種方法:先把一個數據庫中的數據取出來放到某出,然後再把這些數據一條條插入到目的數據庫中,這種方法效率較低,寫起程序來也很繁瑣,容易出錯。另外一種方法是使用bcp或BULK INSERT語句,將數據導入到一個文件中,再從此文件中導出到目的數據庫,這種方法雖然效率稍高,但也有很多不如意的地方,單是在導入時怎樣找到另外一台機器上的數據導入文件就很麻煩。
最方便的一種方法,我想也是效率最高的方法,應該是這樣:
比如有兩個數據庫服務器:zl和ljw,裡面都有一個數據庫taxitemp(也可以不同名),數據庫裡有一個表,叫users,我們現在想把zl中的users數據導入到ljw中,可以這樣寫sql語句(假設現在連接的是zl數據庫):
insert into ljw.taxitemp.dbo.users
select * from users
這樣,通過一條sql語句就完成了不同數據庫服務器之間的數據復制。
有人會說,這種sql語句我也會寫,我也想到了,但是沒辦法執行。
的確,單純的這樣一條語句沒辦法執行,因為數據庫不知道ljw是什麼服務器,也不知道怎樣登錄,當然會報錯。
我們可以這樣解決注冊遠程數據庫服務器和登錄的問題:
注冊遠程數據庫服務器:
EXEC sp_addlinkedserver 'ljw', N'SQL Server'
注冊遠程數據庫服務器的登錄方法:
EXEC sp_addlinkedsrvlogin 'ljw', 'false', NULL, 'sa', 'zz'
至於這兩個存儲過程的詳細用法,我就不多講了,大家看看幫助就明白了。
只要我們先執行遠程數據庫服務器注冊和登錄方法注冊,然後就可以把遠程數據庫當成本地數據庫使用了