Вызов хранимой процедуры SQLServer из Sybase

Я пишу сценарий в 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) или короче.

Что пробовал безуспешно:

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

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

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

Каков тип данных вашего параметра @input на сервере sql? И будьте осторожны, потому что передача строк с разделителями часто является плохим выбором.

Sean Lange 23.05.2018 23:28

@SeanLange тип данных параметра @input - varchar (4000), такой же, как этот. Вы правы, но мне нужно сравнить значения между таблицами в каждой БД, и я не могу использовать шлюз слишком часто.

Danny Leandro 23.05.2018 23:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
688
1

Ответы 1

Вы можете создать 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 )

Меня устраивает.

Другие вопросы по теме