sql 跨庫查詢備忘筆記

select * from OPENDATASOURCE( 
'SQLOLEDB', 
'Data Source=遠程ip;User ID=sa;Password=密碼' 
).庫名.dbo.表名 

insert 本地庫名..表名 select * from OPENDATASOURCE( 
'SQLOLEDB', 
'Data Source=遠程ip;User ID=sa;Password=密碼' 
).庫名.dbo.表名 

或使用聯結服務器: 
--建立linkServer 
exec sp_addlinkedserver '別名','','SQLOLEDB','192.168.2.5' 

--登錄linkServer 
exec sp_addlinkedsrvlogin '別名','false',null,'sa','1234' 

--查詢 
select * from 別名.庫名.dbo.表名 

--之後再也不使用時刪除連接服務器 
exec sp_dropserver '別名','droplogins'安全

 
 
常見問題
SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的訪問,由於此組件已做爲此服務器安全配置的一部分而被關閉。系統管理員能夠經過使用 sp_configure 啓用 'Ad Hoc Distributed Queries'。有關啓用 'Ad Hoc Distributed Queries' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。
 
解決辦法:
 
啓用 Ad Hoc Distributed Queries:exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
 
待插入完成後再關閉 Ad Hoc Distributed Queries:exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure  www.2cto.com  
 
錯誤2 :
 
An explicit value for the identity column in table 'cms_TagSubject' can only be specified when a column list is used and IDENTITY_INSERT is ON.
 
這個真的很糾結,沒辦法,只有 google 了,以後發現能夠 在執行的 SQL 語句先後加上:SET IDENTITY_INSERT tableA ON
 
--執行的SQL
 
SET IDENTITY_INSERT tableB ON
 
試過以後,發現這個方法並不能解決,無奈,最後 找了半天,在國外 論壇找到了解決辦法,就是,要寫查入列的詳細信息
 
解決辦法:
insert into tableA (column1,column2.....)
SELECT * FROM  www.2cto.com  
OPENDATASOURCE('SQLOLEDB', 'Data Source=127.0.0.1,3422;User ID=sa;Password=sasasa;').databaseName.dbo.tableB
 
終於大功告成,另外,利用這種方法,仍是能夠直接從 Excel 裏面查詢的,呵呵,真強大:
 
SELECT * FROM OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0','Excel 8.0;IMEX=1;HDR=YES;DATABASE=D:\a.xls',[sheet1$])
 
跨庫複製表數據,一種很好的方法,呵呵,但願能對你們有所幫助!
相關文章
相關標籤/搜索