使用SQL Case语句获取转换错误
这不管用。我得到一个将varchar转换为int的错误。我很困惑,因为如果我把它作为一个where查询来运行的话。我只是在case语句中得到了错误,不知道为什么 来自使用SQL Case语句获取转换错误,sql,sql-server,Sql,Sql Server,这不管用。我得到一个将varchar转换为int的错误。我很困惑,因为如果我把它作为一个where查询来运行的话。我只是在case语句中得到了错误,不知道为什么 来自案例陈述 从中的类型集中返回优先级最高的类型 结果\u表达式和可选的else\u结果\u表达式 INT的优先级高于varchar,因此所有when表达式都将隐式转换为INT。了解更多有关数据类型优先级的信息 要避免隐式整数转换,请在when表达式中将INT转换为Varchar CASE WHEN Items.SerialNumbe
案例陈述
从中的类型集中返回优先级最高的类型
结果\u表达式和可选的else\u结果\u表达式
INT
的优先级高于varchar
,因此所有when表达式都将隐式转换为INT
。了解更多有关数据类型优先级的信息
要避免隐式整数转换,请在when
表达式中将INT
转换为Varchar
CASE WHEN Items.SerialNumber = -1 THEN Items.Aux1
ELSE Items.SerialNumber
END AS 'CheckNo'
SerialNumber
和Aux1
列的数据类型是什么?您的CASE
语句需要返回一种类型的数据。因此,如果SerialNumber
和Aux1
是不同的数据类型,即SerialNumber
=varchar
和Aux1
=int
那么这就是您的问题。这里涉及的列的类型是什么?您是否也可以显示“工作”示例?您使用的是什么rdbms?一列只能返回一种数据类型。因此,如果Items.Aux1或Items.serial number不具有相同的数据类型(或精度),系统将无法执行您要求的操作。您必须强制转换/转换以将其中一个从int更改为varchar!Aux1是一个varchar。SerialNumber是一个整数。我怎样才能通过它呢。这是超级令人沮丧的lol。我正在使用SQL Server 2008。当我说工作时,我的意思是如果我把它设为-1,我就不会出错。不过,有评论说我的数据类型不同,这很可能是我的问题。谢谢,我最后在SerialNumber上使用了转换。我现在感觉非常慢。谢谢大家在这方面的帮助。
SELECT CASE
WHEN Items.SerialNumber = -1 THEN Items.Aux1
ELSE Cast(Items.SerialNumber AS VARCHAR(100))
END AS 'CheckNo'