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