SQL SERVER Msg 7357錯誤解決

hexiaomail發表於2010-01-15

使用下列查詢時,出現錯誤:
select a.* from OPENROWSET('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','exec [SUSDB]..[spGetSummariesPerUpdate]') as a

Msg 7357, Level 16, State 2, Line 1
無法處理物件"exec [SUSDB]..[spGetSummariesPerUpdate]"。連結伺服器"(null)" 的OLE DB 提供者"SQLNCLI" 指出物件沒有資料行,或是目前的使用者沒有

使用該物件的許可權。

找到微軟SQL2000上關於OpenQuery查詢時的提示
http://support.microsoft.com/kb/297368
T-SQL function OpenQuery fails to execute on linked servers

OpenQuery needs metadata about the columns at compile time. To retrieve the metadata, OpenQuery makes OLE DB calls which eventually

execute the query with the SET FMTONLY ON option. As a result, OpenQuery fails to execute. Because of this behavior, queries that do

not return metadata about columns, such as SQL Server stored procedures, cannot be run by using OpenQuery.


解決方法,在語句中加SET FMTONLY OFF開關即可:
select a.* from OPENROWSET('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','SET FMTONLY OFF exec [SUSDB]..

[spGetSummariesPerUpdate]') as a


下列是有關SET FMTONLY的解釋:
SET FMTONLY  只將後設資料返回給客戶端。

語法:SET FMTONLY { ON | OFF }

註釋:
當 SET FMTONLY 為 ON 時,將不對行進行處理,也不將行作為請求的結果傳送到客戶端。

SET FMTONLY 的設定是在執行或執行時設定,而不是在分析時設定。

許可權:
SET FMTONLY 許可權預設授予所有使用者。

示例
下例將 SET FMTONLY 的設定更改為 ON 並執行 SELECT 語句。該設定使該語句只返回列資訊,而不返回資料行。

SET FMTONLY ON
GO
USE pubs
GO
SELECT *
FROM pubs.dbo.authors
GO

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9932141/viewspace-625224/,如需轉載,請註明出處,否則將追究法律責任。

相關文章