我正在尝试运行此查询:
select * from activity where id = 9348927
我收到此错误:
将varchar值'04 30'转换为数据类型int时,转换失败。
请注意,当我将*更改为id时,我仍会收到此错误,这对我没有任何意义。我运行时没有收到错误:
select top 32 * from activity where id = 9348927
我很确定这意味着第33行的某些数据采用的是SQL Server不喜欢的格式。有什么方法可以让它忽略错误并显示我的数据吗?
编辑:id是varchar(10)
答案 0 :(得分:3)
这通常意味着id列不是数字数据类型,而是varchar。
9348927 是一个数字(int),datatype precedence表示字符串值'04 30'被转换为int。标准SQL行为。
试试这个:
select * from activity where id = '9348927'
很明显,隐式转换意味着不会使用id上的任何索引。比较查询计划。
“解决”这个问题的最佳方法是修复数据和列类型。否则,将比较作为字符串进行,这最有可能是id。