跨服務器返回臨時表數據

解決這個問題,推薦使用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出錯,命令也就無法執行了  

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chenmintong/archive/2007/11/10/1877744.aspx

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