将 varchar 类型的值转换为 smallint 数据类型时转换失败

5
在针对一张包含“smallint”列的表运行select语句时,出现了以上错误:
SELECT * FROM [Database].[dbo].[TableName]
where ColumnName = 'ABC123'

我知道smallint必须是整数,但在表中,数据包含混合数据(即ABC123); 如何在不修改数据类型的情况下运行select语句? 当我尝试修改数据类型时,SQL告诉我需要删除并重建表格,而我无法这样做...
谢谢!

你的例子中ColumnName是什么数据类型?如果ColumnName是small int类型,那么它不可能包含varchar值“ABC123”。 - Chris
ColumnName 的数据类型是 smallint,这是问题的一部分 - 但我保证该列包含 varchar 值。我能够通过在 where 子句中使用 "cast" 来找出结果。请参见下面的答案。这个方法行得通,谢谢! - DangeRuss
SMALLINT数据类型接受隐含比例为零的数字值。它存储介于2^ -15和2^15 -1范围内的任何整数值。尝试分配超出此范围的值会导致错误。- 如果您要存储varchar值,则ColumnName不能是smallint。 - Chris
我知道smallint数据类型是什么,但是在我们的数据库中,这一列包含了smallint值和混合字符值...这就是为什么我需要进行一些挖掘来获取结果。谢谢! - DangeRuss
但是列的实际数据类型在物理上不能是小整数 - - Chris
2个回答

4

使用 Cast,我能够获得以下结果:

select * from TableName
where cast(ColumnName as varchar) = 'ABC123'

这个方案行之有效,已经返回了结果。谢谢!

1

您需要仅选择数字。如果您想要在多个列中进行搜索,可以这样做:

SELECT * FROM [Database].[dbo].[TableName]
where SmallIntColumn = 123 AND CharColumn = 'ABC'

如果该列是数字类型,则不能包含非数字条目。

谢谢你,但我已经解决了!我会编辑我的问题并包含答案。还是谢谢。 - DangeRuss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接