用SQL語句將遠端SQL Server資料庫中表資料匯入到本地資料庫相應的表中
阿新 • • 發佈:2019-01-27
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.表名 –匯入示例 go |
3、若不再使用時,刪除連結伺服器
exec sp_dropserver ‘srv_lnk’,'droplogins’ |
三、方法三
如果只是臨時訪問,可以直接使用openrowset。
1、示例1
–查詢示例 select * 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”。