跨伺服器操作

智慧先行者發表於2014-12-01

 

本文主要介紹了SQL Server資料庫中訪問遠端資料庫的操作,包括Ad Hoc Distributed Queries服務的啟用以及訪問遠端資料庫的一個例項,希望能夠對您有所幫助。

 

SQL Server資料庫遠端操作中,在使用openrowset/opendatasource前首先要啟用Ad Hoc Distributed Queries服務,因為這個服務不安全所以SqlServer預設是關閉的。

1、啟用Ad Hoc Distributed Queries的方法

SQL Server 阻止了對元件'Ad Hoc Distributed Queries' 的STATEMENT'OpenRowset/OpenDatasource'的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用。sp_configure 啟用 'Ad Hoc Distributed Queries'。

啟用Ad Hoc Distributed Queries的方法,執行下面的查詢語句就可以了:

   exec sp_configure 'show advanced options',1 

 

   reconfigure 

 

   exec sp_configure 'Ad Hoc Distributed Queries',1 

 

reconfigure

使用完畢後,記得一定要關閉它,因為這是一個安全隱患,切記執行下面的SQL語句:

   exec sp_configure 'Ad Hoc Distributed Queries',0  

 

   reconfigure 

 

   exec sp_configure 'show advanced options',0 

 

reconfigure

2、使用示例

建立連結伺服器

1         exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '遠端伺服器名或ip地址 '  

2          

3         exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '使用者名稱 ', '密碼 ' 

查詢示例

4         select * from ITSV.資料庫名.dbo.表名

匯入示例

5         select * into 表 from ITSV.資料庫名.dbo.表名 

以後不再使用時刪除連結伺服器

6         exec sp_dropserver  'ITSV ', 'droplogins ' 

3、連線遠端/區域網資料(openrowset/openquery/opendatasource)

1、openrowset

查詢示例

7         select * from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名) 

生成本地表

8         select * into 表 from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名) 

把本地表匯入遠端表

9         insert openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)  

10       

11      select *from 本地表

更新本地表

12      update b  

13       

14      set b.列A=a.列A  

15       

16      from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)as a inner join 本地表 b  

17       

18      on a.column1=b.column1

openquery用法需要建立一個連線。

首先建立一個連線建立連結伺服器

19      exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '遠端伺服器名或ip地址 ' 

查詢

20      select * FROM openquery(ITSV,  'SELECT *  FROM 資料庫.dbo.表名 ') 

把本地表匯入遠端表

21      insert openquery(ITSV,  'SELECT *  FROM 資料庫.dbo.表名 ')  

22       

23      select * from 本地表

更新本地表

24      update b  

25       

26      set b.列B=a.列B  

27       

28      FROM openquery(ITSV,  'SELECT * FROM 資料庫.dbo.表名 ') as a   

29       

30      inner join 本地表 b on a.列A=b.列A

2、opendatasource/openrowset

31      SELECT   * FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta 

把本地表匯入遠端表:

32      insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').資料庫.dbo.表名  

33       

34      select * from 本地表

相關文章