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)
出了什么问题?
因为它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)
| 归档时间: |
|
| 查看次数: |
929 次 |
| 最近记录: |