跨伺服器返回儲存過程臨時表資料

2021-04-13 22:45:39 字數 1110 閱讀 2851

解決這個問題,推薦使用openquery或openrowset的方法.  

首先要說的是,這是一種非常規的方法,有一些效能上的缺陷.  

openquery,openrowset允許使用者在鏈結伺服器上查詢.通過這種方法來得到查詢的結果集.  

1.在建立儲存過程中,必須設定  

set   ansi_nulls   on  

set   ansi_warnings   on  

(在查詢分析器中執行,將預設啟用這些設定)  

2.定義鏈結伺服器(必須有sysadmin許可權)  

exec   sp_addlinkedserver   @server   =   'localserver',     @srvproduct   =   '',  

@provider   =   'sqloledb',   @datasrc   =   @@servername  

@server是自定義鏈結伺服器的名稱  

(如果不指定,將預設為master)  

3.這個時候就可以使用  

eg:select   *   from   openquery(localserver,   'exec   mystoreproc')    

來得到儲存過程返回的結果集.   

如果使用了臨時表,必須如下呼叫  

select   *   from   openquery(localserver,'set   fmtonly   off   exec   pubs..sp_fkeys   authors')  

通常來說,openquery只是作為乙個快捷的遠端資料庫訪問,它必須跟在select後面,也就是說需要返回乙個recordset.  

而加上set   fmtonly   off用來遮蔽預設的只返回列資訊的設定之後  

select   *   from   openrowset(sqloledb,server;sa;,set   fmtonly   off    

exec   ...)    

,這樣返回的output集合就會提交給前面的select顯示。  

如果採用預設設定,會返回空集合導致select出錯,命令也就無法執行了  

跨多個儲存過程使用臨時表

今天,在sql server 2008 中,在乙個儲存過程中建立了乙個臨時表 table1,打算在另外乙個儲存過程中使用這個臨時表。可是悲劇的是,怎麼都失敗。更暈的是,我是在乙個asp.net專案中呼叫的儲存過程。其中除錯錯誤的艱辛。誰用誰知道啊!查了資料,才知道原來這裡需要用全域性表變數 tabl...

如何從伺服器上利用儲存過程返回資料集

這是以前我在大富翁回答別人的 例如查詢scott下面的emp 1.建包,定義游標型別和過程 create or replace package pkg demo as type empcurtyp is ref cursor return emp rowtype procedure open emp...

sqlserver跨伺服器備份表資料

跨伺服器資料庫 資料查詢可以用 openrowset 用法如下 select into 表名 from openrowset sqloledb 資料庫ip 賬號 密碼 資料庫名稱.dbo.表名 如果發現下面錯誤 訊息 15281,級別 16,狀態 1,第 1 行 sql server 阻止了對元件 ...