【问题标题】:Calling SQLServer stored procedure from Sybase从 Sybase 调用 SQLServer 存储过程
【发布时间】:2018-05-23 21:22:55
【问题描述】:

我正在 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 服务器:网关,线路:0

我在SQLServer中的存储过程

我不知道为什么 Sybase 会添加正确的填充。我可以让它工作的唯一方法是将变量 @input 声明为 varchar(255) 或更短。

我没有运气的尝试:

  • 在 sybase 中添加 rtrim 和 ltrim
  • 将变量设置为 TEXT
  • 在 SQLServer 中添加 rtrim 和 ltrim
  • 添加replace(@input,' ', '')
  • 想在 SQLServer 中复制问题,将 pad 添加到右侧,但它仍然有效。

重要的是:我可以从 SQLServer 中执行它,但它会从 Sybase 中抛出具有相同输入数据的错误

任何帮助将不胜感激。我猜这与 varchar 的大小有关,但还没有任何线索。

【问题讨论】:

  • sql server 中@input 参数的数据类型是什么?并且要小心,因为传递分隔字符串通常是一个糟糕的选择。
  • @SeanLange @input 参数的数据类型是 varchar(4000) 和这个一样。你是对的,但我需要比较每个数据库上的表之间的值,并且不能经常使用网关。

标签: sql sql-server sybase sap-ase


【解决方案1】:

您可以像这样在 Sybase 中创建remote procedure

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 )

它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多