这段代码已经使用了一年,但是突然之间,我们开始得到:
将varchar值“ This is full”转换为数据类型int时转换失败
代码:
CASE
WHEN L.Seating_Capacity - COALESCE(TS.TakenSeats,0) = 0 THEN 'This is full'
WHEN l.location = 'MLK High School' AND d.trainingDates = '5/14/2014' THEN 70 - COALESCE(TS.TakenSeats,0)
ELSE CAST(L.Seating_Capacity - COALESCE(TS.TakenSeats,0) AS VARCHAR)
END AS 'AvailableSeats'
任何想法出了什么问题?
因为CASE
是一个表达式-它计算单一类型的单一值。因此,所有可能的THEN
s(和ELSE
)必须全部产生可以转换为单一类型的值。您不能让一个THEN
产生一个,varchar
而另一个不能产生一个int
。
而且,由于int
具有更高的优先级比varchar
,这就是单一的数据类型的SQL Server会尝试把一切。
CASE WHEN L.Seating_Capacity - COALESCE(TS.TakenSeats,0) = 0
THEN 'This is full'
WHEN l.location='MLK High School' AND d.trainingDates = '5/14/2014'
THEN CONVERT(varchar(10),70 - COALESCE(TS.TakenSeats,0))
ELSE CONVERT(varchar(10),L.Seating_Capacity - COALESCE(TS.TakenSeats,0))
END AS 'AvailableSeats'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句