此代码在过去的一年中一直在运作,但突然间,我们开始了:
转换varchar值时转换失败'这是完整的'到数据类型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'
任何想法出了什么问题?
答案 0 :(得分:5)
因为CASE
是表达式 - 它会计算单个类型的单个值。因此,所有可能的THEN
s(和ELSE
)都必须生成可以转换为单一类型的值。您不能让一个THEN
生成varchar
,而另一个生成int
。
由于int
的{{3}}高于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'