【发布时间】: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