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

Chi*_*keh 0 sql sql-server sql-server-2008

这段代码已经工作了一年,但突然间,我们开始得到:

将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'
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

Dam*_*ver 5

因为它CASE是一个表达式 - 它计算单个类型的单个值.因此,所有可能的THENs(和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'
Run Code Online (Sandbox Code Playgroud)