存储过程调用链接服务器时出现语法错误?

时间:2011-05-23 15:31:59

标签: sql sql-server informix

我有一台Informix机器,我在SQL Server中配置为链接服务器。

我可以远程发送,并接收查询结果,比如说

SELECT * FROM linkedServer.instanceName.database.myTable

但无法运行

linkedServer.instanceName.database.selectAllFromMYTABLE

存储过程。

我收到的错误消息是“[Informix] [Informix ODBC Driver] [Informix]发生语法错误。”除了告诉我我的请求是以某种形式收到之外,这并没有大的帮助......

有人能告诉我通过SQL Server执行Informix存储过程的正确调用语法是什么?据推测,我搞砸了存储过程调用,因为可以验证存储过程在Informix服务器上是否正常工作。

编辑:添加我正在测试的存储过程的全文,以验证我在Informix中没有做一些愚蠢的事情,这导致了SQL Server执行的连锁问题:

CREATE FUNCTION sp_testSP()
   RETURNING char(20) as item_no

   DEFINE item_no char(20);

   FOREACH
    SELECT table_name.item_code
     INTO item_no
     FROM table_name
     WHERE table_name.item_code LIKE 'test%'
     RETURN item_no WITH RESUME;
   END FOREACH;
END FUNCTION

正如我所提到的,这似乎在RazorSQL中运行良好,我已经连接到Informix,但是可能会看到这会慢慢占用某人的内存,原因是SQL Server无法使用这种返回方法... < / p>

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用OpenQuery

http://msdn.microsoft.com/en-us/library/ms188427.aspx

答案 1 :(得分:1)

在原生Informix中,你会写(大约):

EXECUTE PROCEDURE database@linkedServer:selectAllFromMYTABLE();

我不确定你的实例名称在哪里 - “linkedServer”对应于一个实例名称(以我的思维方式)。最接近的方法是:

database@linkedServer:instancename.selectAllFromMyTABLE()
instancename@linkedServer:database.selectAllFromMyTABLE()

但是,这是通过本机Informix接口实现的。如果您通过SQL Server,则语法可能需要是用于调用过程的本机SQL Server语法。理论上,我相信,所使用的API(ODBC或其他)应该能够转换为本机Informix语法。