SQL跨服務器查詢

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.表名  

   

  或使用聯結服務器:  

  EXEC   sp_addlinkedserver   '別名','','MSDASQL',NULL,NULL,'DRIVER={SQL   Server};SERVER=遠程名;UID=用戶;PWD=密碼;'  

  exec   sp_addlinkedsrvlogin     @rmtsrvname='別名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密碼'  

  GO  

  然後你就可以如下:  

  select   *   from   別名.庫名.dbo.表名  

  insert   庫名.dbo.表名   select   *   from   別名.庫名.dbo.表名  

  select   *   into   庫名.dbo.新表名   from   別名.庫名.dbo.表名  

  go

sql跨服務器查詢2008-12-22 13:53--跨服務器查詢如下:

SELECT a.*,b.stor_Name

FROM OPENROWSET('MSDASQL',

   'DRIVER={SQL Server};SERVER=tom;UID=sa;PWD=123',

   pubs.dbo.authors) AS a,stores b

ORDER BY a.au_lname, a.au_fname

--其中,tom爲遠程服務器名,stores 是本機數據庫pubs中的表

--需要注意的是若二個表中的記錄數目不同會導致某一個表產生完全重複的行,

--得到的記錄集的行數爲最長的那個表中的行數

 

如:

insert into dbo.Kqmx_200704

select *

from openrowset('MSDASQL',

   'DRIVER={SQL Server};SERVER=192.168.1.253;UID=sa;PWD=',

   one.dbo.Kqmx_200704)

 

另:

 

 

連接遠程服務器進行數據查詢時可以這麼做:select * from [**.**.**.**].test.dbo.t1

不過,不出意外的話會報錯:在 sysservers 中未能找到服務器 '**.*.**.**'。請執行 sp_addlinkedserver 以將服務器添加到 sysservers。

添加sysservers:exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','**.*.**.**'

再查詢:select * from srv_lnk.test.dbo.t1 (因爲定義了“別名”,所以這兒“別名”)

除非兩個服務器上的該用戶的密碼一樣,否則會報:用戶 '**' 登錄失敗。

指定登錄用戶:exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'rUser','rPwd' 

再查詢:select * from srv_lnk.test.dbo.t1,如果無意外的話就應該是成功的

 

sp_addlinkedserver

創建一個鏈接的服務器,使其允許對分佈式的、針對 OLE DB 數據源的異類查詢進行訪問。在使用 sp_addlinkedserver 創建鏈接的服務器之後,此服務器就可以執行分佈式查詢。如果鏈接服務器定義爲 Microsoft? SQL Server?,則可執行遠程存儲過程。

 

Exec sp_droplinkedsrvlogin server,Null

Exec sp_dropserver server

EXEC sp_addlinkedserver

@server= 'server ',--被訪問的服務器別名

@srvproduct= ' ',

@provider= 'SQLOLEDB ',

@datasrc= '10.23.11.28,3342 ' --要訪問的服務器

 

 

EXEC sp_addlinkedsrvlogin

'server ', --被訪問的服務器別名

'false ',

NULL,

'la0001 ', --帳號

'aaaaaa ' --密碼

 

 

鏈接服務器沒問題,在查詢分析器裏執行例如:select * from [192.168.0.119].fash.dbo.vwAllUser沒問題.

但如果想建立一個簡單的存儲過程:

CREATE PROCEDURE TEST AS

set nocount on

SET ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER,ANSI_NULLS,ANSI_PADDING,ANSI_WARNINGS ON

set NUMERIC_ROUNDABORT off

 

select * from [192.168.0.119].fash.dbo.vwAllUser

GO

 

不能保存此存儲過程,提示:

錯誤7405:異類查詢要求爲連接設置 ANSI_NULLS 和 ANSI_WARNINGS 選項。這將確保一致的查詢語義。請啓用這些選項,然後重新發出查詢。

 

 

解決辦法:

 

在存儲過程中加

SET ANSI_NULLS ON

SET ANSI_WARNINGS ON

SET XACT_ABORT on


發佈了0 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章