为什么我在转换varchar值时转换失败'这是'数据类型int'。

时间:2014-04-10 14:44:34

标签: sql sql-server sql-server-2008

此代码在过去的一年中一直在运作,但突然间,我们开始了:

  

转换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'

任何想法出了什么问题?

1 个答案:

答案 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'