解決這個問題,推薦使用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 阻止了對元件 ...