即使数据几乎相似,我在一个特定环境/数据库中遇到查询问题。以下是简化方案:
表A - 一列 - Id(长)
Id
1
2
3
表B - 两列 - 值(varchar)和field2(varchar)
Value Field2
1)abc NotKey
2)Test NotKey
3)1 Key
4)1.56 NotKey
当我运行查询时
select * from table a
where id in(select value from table b where Field2 = 'Key')
我收到错误
结果:转换varchar值时转换失败' abc' (早些时候我将这个值作为' NotKey')数据类型为int。
在一个数据库上。在其他三个数据库中,该值正确返回为" 1"。
我正在使用SQL Server 2008.这可能是什么问题?
答案 0 :(得分:1)
您必须在此实例中有一条记录,该记录不会像以前一样遵循相同的模式。尝试运行以下查询以查找错误数据。您可以修复记录,也可以对您正在使用的查询添加数字检查。
select *
from table
where Field2 = 'Key'
and (ISNUMERIC(Value) = 0
OR CHARINDEX('.', Value) > 0);
过滤后的查询:
select *
from table a
where id in
(
select value
from table b
where Field2 = 'Key'
and ISNUMERIC(value) = 1
and CHARINDEX('.', Value) = 0
);
答案 1 :(得分:1)
您为导致错误的过滤器提供了错误的过滤器。
只有在您选择:
时才会发生错误select * from tablea
where id in(select value from tableb where Field2 = 'NotKey')
您必须投射其中一列
select * from tablea
where cast( id as nvarchar(20)) in(select value from tableb where Field2 = 'NotKey')