使用OPENQUERY执行存储过程

ctr*_*373 5 sql t-sql sql-server sybase openquery

我有SQL Server 2008与链接的Sybase服务器,我试图使用OPENQUERY在Sybase服务器上执行存储过程.如果我有一个不带参数的存储过程,它就会成功.如果我有一个带参数的存储过程则失败.我甚至尝试过一个非常基本的存储过程,只接受一个仍然失败的int.以下是我使用的语法:

select * from 
OPENQUERY([LINKSERVER],'exec database.user.my_stored_proc ''AT'',''XXXX%'',''1111'',1')
Run Code Online (Sandbox Code Playgroud)

消息7357,级别16,状态2,行3无法处理对象"exec database.user.my_stored_proc'AT','XXXX%','1111',1".链接服务器"LINKSERVER"的OLE DB提供程序"ASEOLEDB"表示该对象没有列,或者当前用户没有该对象的权限.

由于proc将在没有参数的情况下执行得很好,我认为这不是一个权限问题.

mrw*_*aim 14

这对我有用,

SELECT * FROM OPENQUERY(LOCALSERVER, 'SET FMTONLY OFF EXEC snr.dbo.GetAllSignals @controlRunId = 25, @experimentRunId = 26')
Run Code Online (Sandbox Code Playgroud)

我正在创建临时表,这就是我拒绝访问的原因

这里有更多信息http://www.sommarskog.se/share_data.html#OPENQUERY


Sai*_*han 2

链接服务器和 OPENQUERY、Gems 到 MS SQL Server...都是披着羊皮的狼。我发现以下解决方案在处理参数时有效

  1. 如果 SP 基本上只是 SELECT 语句,则将其移动到 VIEW 并仅通过 OPENQUERY 传递 SQL 语句。

  2. 将 OPENQUERY 构建为字符串,然后使用execute_sql。