Вызов хранимой процедуры SQLServer из Sybase - PullRequest
0 голосов
/ 24 мая 2018

Я пишу скрипт в Sybase ASE, где я вызываю хранимую процедуру в SQL Server.У меня проблема в том, что я получаю сообщение об ошибке от Sybase, но не от SQL Server.

Сценарий в Sybase выглядит следующим образом:

declare @input varchar(4000)
select @input = '111,222,333,444,555'
exec GATEWAY.MyDataBase..MyStoredProcedure @input

Иэто ошибка:

[Ошибка] Строки сценария: 1-5 -------------------------- Преобразованиене удалось преобразовать значение varchar '555 .............................................................................................................................................»к типу данных int.Сообщение: 245, Уровень: 16, Состояние: 1 Сервер: GATEWAY, Строка: 0

Моя хранимая процедура в SQLServer

Не знаю, почемуSybase добавляет это правильное заполнение.Единственный способ заставить его работать - объявить переменную @input как varchar(255) или короче.

То, что я попытался без удачи:

  • Добавление в sybase rtrim и ltrim
  • Установка переменной как TEXT
  • Добавление rtrim и ltrim в SQLServer
  • Добавление replace(@input,' ', '')
  • Требуется повторить проблему в SQLServer с добавлением панеливправо, но он все еще работает.

Важно то, что: Я могу исключить его из SQLServer, но он выдает ошибку из Sybase с теми же входными данными .

Любая помощь будет принята с благодарностью.Я предполагаю, что это как-то связано с размером varchar, но понятия не имею.

1 Ответ

0 голосов
/ 15 февраля 2019

Я не помню, какую ошибку я получил, когда впервые пытался вызвать хранимую процедуру MS SQL из Sybase.Но теперь я только что создал remote procedure в Sybase следующим образом:

CREATE PROCEDURE "DBA"."uspSQL_CreateTicketsByCaseNo;1"( in @caseNo varchar(8) ) 
at 'SQL;dbName;dbo;uspSQL_CreateTicketsByCaseNo'

Вы также можете просто щелкнуть правой кнопкой мыши Procedures & Functions и использовать там мастер для создания remote procedure.Тогда вы можете позвонить remote procedure следующим образом:

CALL "DBA"."uspSQL_CreateTicketsByCaseNo;1"( caseNo )

Я не уверен, может ли это решить вашу проблему.

...