使用OPENQUERY执行存储过程

我有SQL Server 2008与链接的Sybase服务器,我试图使用OPENQUERY在Sybase服务器上执行存储过程。如果我有一个不带参数的存储过程,它就会成功。如果我有一个带参数的存储过程则失败。我甚至尝试过一个非常基本的存储过程,只接受一个仍然失败的int。以下是我使用的语法:
select * from 
OPENQUERY([LINKSERVER],'exec database.user.my_stored_proc ''AT'',''XXXX%'',''1111'',1')
Msg 7357,Level 16,State 2,Line 3 无法处理对象“exec database.user.my_stored_proc'AT','XXXX%','1111',1”。链接服务器“LINKSERVER”的OLE DB提供程序“ASEOLEDB”表示该对象没有列,或者当前用户没有该对象的权限。 由于proc将在没有参数的情况下执行得很好,我认为这不是一个权限问题。     
已邀请:
链接服务器和OPENQUERY,Gems到MS SQL Server ......这些都是绵羊服装中的狼。我在处理参数时发现了以下解决方案 如果SP基本上只是SELECT语句,则将其移动到VIEW并通过OPENQUERY传递SQL语句。 将OPENQUERY构建为字符串,然后使用execute_sql。     
这对我有用,
SELECT * FROM OPENQUERY(LOCALSERVER, 'SET FMTONLY OFF EXEC snr.dbo.GetAllSignals @controlRunId = 25, @experimentRunId = 26')
我正在创建临时表,这就是我拒绝访问的原因 这里有更多信息http://www.sommarskog.se/share_data.html#OPENQUERY     
我创建一个不返回任何值的sp,它不起作用。 你在mysql中的SP必须返回一个值! 例如我在“mysql”中这样做:
CREATE DEFINER=`root`@`localhost` PROCEDURE `MyPro`(IN `Name` VARCHAR(50), IN `Id` INT, OUT `Result` INT)
MODIFIES SQL DATA
BEGIN
DECLARE Result INT;
    SET Result = 0;
INSERT into MyTable (Id,Name)  VALUES(Id,Name);
SELECT Result;

END
“Id”和“Name”是输入参数,“Result”是输出参数 并在SQL SERVER中创建链接服务器并像这样调用它:
select * from openquery
(
    Test,'call mydb.MyPro(''Name'',''16'', @P0);'
)
它对我有用:D     
您还可以看到它是否适用于exec与SET FMTONLY ON: OPENQUERY([LINKSERVER],'SET FMTONLY ON; exec database.user.my_stored_proc''AT'',''XXXX%'',''1111'',1') 如果您尝试这个并且它可以工作,您可能应该谷歌FMTONLY + OPENQUERY来了解它的含义。     

要回复问题请先登录注册