Синтаксическая ошибка при вызове хранимой процедуры к связанному серверу? - PullRequest
1 голос
/ 23 мая 2011

У меня есть машина Informix, которую я настроил как связанный сервер в SQL Server.

Я могу удаленно отправлять и получать результаты запроса, скажем

SELECT * FROM linkedServer.instanceName.database.myTable

, но не может запустить хранимую процедуру

linkedServer.instanceName.database.selectAllFromMYTABLE

.

Возвращаемое сообщение об ошибке: «[Informix] [Informix ODBC Driver] [Informix] Синтаксиспроизошла ошибка. "который не очень полезен, за исключением того, что он говорит мне, что мой запрос был получен в некоторой форме ...

Может ли кто-нибудь сказать мне, какой будет правильный синтаксис вызова для выполнения хранимой процедуры Informix через SQL Server?Предположительно я испорчу вызов хранимой процедуры, потому что можно проверить, что хранимая процедура работает нормально на сервере 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 не может работать с этим методом возврата ...

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Вы пробовали использовать OpenQuery?

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

1 голос
/ 24 мая 2011

В нативном Informix вы бы написали (приблизительно):

EXECUTE PROCEDURE database@linkedServer:selectAllFromMYTABLE();

Я не совсем уверен, куда вы вписали бы имя экземпляра в него - 'connectedServer' соответствует имени экземпляра (на мой взгляд).Ближайшие подходы будут:

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

Однако это через собственные интерфейсы Informix.Если вы используете SQL Server, то синтаксис, вероятно, должен быть собственным синтаксисом SQL Server для вызова процедуры.Теоретически, я полагаю, используемый API (ODBC или любой другой) должен иметь возможность переводить на собственный синтаксис Informix.

...