一个关于SQL连接其他服务器数据库查询数据的问题

"[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of the varchar value '11100401601 ' overflowed an int column. Maximum integer value exceeded." 这个错误是什么意思?怎么解决?求大神解答,越详尽越好!

问题本身的含义是指将'11100401601 '这个字符转换为int时越界了。就是说大于int能表示的最大值范围了。首先要确定字符串所表示的数字本身是否正确,是不是写错了某个字符。其次就是别强转成int,SQL里还有其他的数字类型,比如decimal什么的。看你的需要了。但是如果你要插入一张已有表,并且里面本来就有这种数据,你就完全可以使用sp_help+表名称这个命令来看看原表中的数据类型,然后强制转换成一致的。追问

我是通过地址访问其他服务器查询数据的!select * from openrowset('MSDASQL','driver={sql server};server=目标服务器IP;uid=用户名;pwd=密码',表)这样写的单独运行可以运行,但是与其他表联合查询就出错了!

追答

这是因为你在这个查询中没有任何需要做数据转换的语句。
你的联合查询可能就包含了。
你怎么写的联合查询呢?

追问

select production_order.orderno
from production_order
join (select * from openrowset('MSDASQL','driver=驱动;server=IP地址;uid=用户名;pwd=密码',[gcerp35].dbo.wo_mstr)) a
on a.wo_nbr=production_order.prodorderid

追答

这里唯一可能的地方就是在join后面的on上有两个相等的
你看看这两个字段的类型,可能是不一致的。然后在比较的时候,系统默认转换了下。
你可以考虑将其中一个短类型强制转换为长类型。

温馨提示:答案为网友推荐,仅供参考