0

我可以访问两个数据库,它们应该是彼此的副本。两者都有一个名为GROUPcolumn的表GROUP_INVOICE_NUMBER (varchar(20), not null)

在我可以执行的第一个数据库上:

select *
from GROUP
where GROUP_INVOICE_NUMBER = 4

这很好。但是在第二个我得到:

消息 245,级别 16,状态 1,行 1 将 varchar 值“1626CR2”转换为数据类型 int 时转换失败。

我知道两个数据库实例之间肯定存在差异,我猜它们与隐式转换和/或警告级别有关。

您认为这种差异在哪里?

笔记:

我知道这是一个糟糕的数据库设计,但是我们一直在努力改进一个遗留系统(因此我们需要创建一个测试环境),我们看到了这个问题。

4

2 回答 2

1

这是因为未显示错误的数据库在 GROUP_INVOICE_NUMBER 列中仅包含整数值。这意味着列值不包含字母数字字符。试试这样:

select *
from GROUP
where GROUP_INVOICE_NUMBER = '4'
于 2013-10-08T11:52:30.920 回答
0

不同之处在于第二个数据库的列中的数据不是数字,因此根本无法进行隐式转换。在任何情况下,您都不应该依赖隐式转换。正确存储数据或进行显式转换。这应该适用于两者:

select *
from GROUP
where GROUP_INVOICE_NUMBER = '4'
于 2013-10-08T11:47:55.753 回答