Я пишу сценарий в Sybase ASE, в котором вызываю хранимую процедуру в SQL Server. Проблема в том, что я получаю сообщение об ошибке от Sybase, но не от SQL Server.
Скрипт в Sybase выглядит следующим образом:
declare @input varchar(4000)
select @input = '111,222,333,444,555'
exec GATEWAY.MyDataBase..MyStoredProcedure @input
И это ошибка:
[Error] Script lines: 1-5 -------------------------- Conversion failed when converting the varchar value '555.............................................................................................................................................' to data type int. Msg: 245, Level: 16, State: 1 Server: GATEWAY, Line: 0
Моя хранимая процедура в SQLServer
Я не знаю, почему Sybase добавляет это правильное заполнение. Единственный способ заставить его работать - объявить переменную @input как varchar(255) или короче.
Что пробовал безуспешно:
replace(@input,' ', '')Важно то, что: Я могу исключить его из SQLServer, но он выдает ошибку из Sybase с теми же входными данными..
Любая помощь будет очень признательна. Я предполагаю, что это как-то связано с размером varchar, но пока не знаю.
@SeanLange тип данных параметра @input - varchar (4000), такой же, как этот. Вы правы, но мне нужно сравнить значения между таблицами в каждой БД, и я не могу использовать шлюз слишком часто.


Вы можете создать 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 )
Меня устраивает.
Каков тип данных вашего параметра @input на сервере sql? И будьте осторожны, потому что передача строк с разделителями часто является плохим выбором.