Sql 对链接服务器的存储过程调用出现语法错误?
我有一台Informix机器,在SQL server中配置为链接服务器 我可以远程发送和接收查询结果,比如Sql 对链接服务器的存储过程调用出现语法错误?,sql,sql-server,informix,Sql,Sql Server,Informix,我有一台Informix机器,在SQL server中配置为链接服务器 我可以远程发送和接收查询结果,比如 SELECT * FROM linkedServer.instanceName.database.myTable 但是不能运行 linkedServer.instanceName.database.selectAllFromMYTABLE 存储过程 返回的错误消息是“[Informix][Informix ODBC Driver][Informix]发生语法错误”。这没有多大帮助,只是
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
正如我所提到的,这在我连接到Informix的RazorSQL中似乎工作得很好,但看到这一点可能会让某些人的内存受到影响,这就是为什么SQL Server无法使用此返回方法的原因…您是否尝试过使用
OpenQuery
在本机Informix中,您可以写(大约): 我不太确定实例名应该放在哪里——“linkedServer”对应一个实例名(按照我的想法)。最近的办法是:
database@linkedServer:instancename.selectAllFromMyTABLE()
instancename@linkedServer:database.selectAllFromMyTABLE()
但是,这是通过本机Informix接口实现的。如果通过SQL Server,那么语法可能需要是调用过程的本机SQL Server语法。理论上,我相信,所使用的API(ODBC或其他什么)应该能够转换为本机Informix语法。看起来很有希望,但读了这篇文章后我发现:“OPENQUERY不能用于在链接服务器上执行扩展存储过程。”嗯。。。我已让openquery请求执行存储过程,但它会收到与其他方法相同的语法错误消息。
select*from openquery([linkedServer],“execute function instancename:sp_testSP()”)
。括号和所有内容。昨天某个时候,我收到一个错误,即链接服务器连接中的行linkedServer.instanceName.database.selectAllFromMYTABLE
“远程过程调用”未启用,因此我假设该行调用存储过程失败。我的主要困惑源于,既然我已经在SQLServer链接的服务器对象上启用了RPC,那么当直接从Informix连接执行存储过程时,存储过程不包含这样的错误时,为什么它现在会由于这个语法错误而失败。
database@linkedServer:instancename.selectAllFromMyTABLE()
instancename@linkedServer:database.selectAllFromMyTABLE()