2010-11-11 864 views
5

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

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

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

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

+0

你尝试直接在Sybase上运行的SQL文本? – Andomar 2010-11-11 21:48:24

+0

是的,在Sybase上执行得很好 – 2010-11-15 14:54:06

回答

1

链接服务器和OPENQUERY,宝石到MS SQL服务器......这是羊服装的狼。我发现了以下解决方案与参数

  1. 打交道时,如果SP基本上是SELECT语句,此举同样的VIEW上班只是通过OPENQUERY通过SQL语句。

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

1

你也可以看到,如果它的工作原理与SET FMTONLY ON先于高管:

OPENQUERY([LINKSERVER], 'SET FMTONLY ON; EXEC database.user.my_stored_proc'出现在' '' 'XXXX%'',''1111'',1')

如果你试试这个,它可以工作,你应该可以谷歌FMTONLY + OPENQUERY了解它的含义。

+1

不行,这不起作用 – 2010-11-15 14:51:21

12

这为我工作,

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

我创建临时表,这就是为什么我得到拒绝访问

下面是详细信息http://www.sommarskog.se/share_data.html#OPENQUERY

+0

+1这也适用于我。谢谢!我没有使用临时表,但是我正在远程过程中执行一个EXEC(@VariableWithQuery),其中该变量是从SELECT语句中设置的。直到我添加了“SET FMTONLY OFF”,这才奏效。到开始。但是,如果我通过SET命令设置变量,那么它不需要SET FMTONLY即可工作。奇。 – 2012-06-22 21:22:49

+0

谢谢!这也适用于我! :) – Erick 2013-03-04 21:43:32

+0

公正的警告,这种方法有一些潜在的意外后果,正如本答案所讨论的:https://stackoverflow.com/a/14299989;但是,这是“让它工作”的最简单方法,并且避免处理DTC,这可能更糟糕,所以这('SET FMTONLY OFF')是一个公平的解决方法。 – NateJ 2017-06-30 02:05:11

2

我创建了一个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”和“名称”输入参数和“结果”是输出参数 在SQL Server中创建链接的服务器,并调用它是这样的:

select * from openquery 
(
    Test,'call mydb.MyPro(''Name'',''16'', @P0);' 
) 

它为我的作品:d