怎樣用SQL語句將一個遠程SQL Server資料庫中各個表的資料匯入到本機資料庫相應的表中
發表時間:2005-7-18
怎樣用SQL語句將一個遠程SQL Server資料庫中各個表的資料匯入到本機資料庫相應的表中?
表結構完全相同,聽說DTS比較方便,但是不會用
一、方法一
1、遠端資料庫註冊到本地的方法:
exec sp_addlinkedserver '名稱','','SQLOLEDB','遠端資料庫的地址' exec sp_addlinkedsrvlogin '名稱','false','本機使用者名稱','遠端使用者名稱','遠端使用者密碼' |
2、倒入表
insert 資料庫.dbo.表 select * from 遠程名稱.dbo.表 |
建立了串連後,試試看
二、方法二
訪問不同電腦上的資料庫(遠端存取,只好聯好網就一樣),如果經常訪問或資料量較大,建議用連結的伺服器方法。
1、建立連結的伺服器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','遠程伺服器名或IP地址' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'使用者名稱','密碼' exec sp_serveroption 'srv_lnk','rpc out','true' --這個允許調用連結的伺服器上的預存程序 go |
2、使用樣本
--查詢樣本 select * from srv_lnk.資料庫名.dbo.表名 --匯入樣本 select * into 表 from srv_lnk.資料庫名.dbo.表名 go |
3、若不再使用時,刪除連結的伺服器
exec sp_dropserver 'srv_lnk','droplogins' |
三、方法三
如果只是臨時訪問,可以直接使用openrowset。
1、樣本1
--查詢樣本 select * from openrowset('SQLOLEDB' ,'sql伺服器名';'使用者名稱';'密碼',資料庫名.dbo.表名) --匯入樣本 select * into 表 from openrowset('SQLOLEDB' ,'sql伺服器名';'使用者名稱';'密碼',資料庫名.dbo.表名) |
2、樣本2(此樣本使用測試正常)
insert 資料庫名稱.dbo.表 select * from from openrowset('MSDASQL', 'DRIVER={SQL Server};SERVER=遠程伺服器位址;UID=使用者名稱;PWD=密碼',表) AS a |
四、相關問題
問:當匯入的資料量很大,而網路突然中斷,會不會出現問題?
答:中斷的話,就等於什麼也沒做,也就是交易回復,重新運行。
五、隨後的問題
問:由於在表中,通常都定義了自增量列及主鍵,而自增量列還進行了關連。由於在倒表時,自增量列不隨原表變化,就造成了關聯關係的丟失,通常的做法是:
SET IDENTITY_INSERT 表名 ON insert into 表名(欄位,欄位,欄位) values (64,'han','guo') SET IDENTITY_INSERT 表名OFF |
即使用“SET IDENTITY_INSERT 表名 ON”將自增量關閉,但是,需要注意的是,當該表中沒有自增量欄位時,使用該命令會產生一個錯誤。
因此,在沒有自增量欄位的表中進行“插入”操作時,請不要使用“SET IDENTITY_INSERT 表名 ON”。