解決這個問題,推薦使用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