2014-04-10 1 views
0

이 코드는 지난 1 년 동안 일하고있다 갑자기, 우리는 시작하기 다음 VARCHAR 값 int 데이터 형식 '이 가득'을 변환 할 때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' 

어떤 아이디어가 잘못 되었나요?

+0

코드가 작동 중이며 코드 또는 SQL Server 소프트웨어 중 하나가 변경되어 갑자기 오류가 발생했다고 의심됩니다. –

+0

@ 프랭크, 그러지 마라. 거짓말 할 이유가 없어. 작년의 샘플 데이터를 원한다면 나중에 삭제하는 것만 큼 행복하게 보여줄 것입니다. –

+0

나는 거짓말했다고 주장하지 않습니다. 나를 그렇게 할 이유가 없다. 나는 당신이 뭔가를 놓쳤을지도 모르는 것을 제안하고있다. .. 우리가 여기에서 확인할 수 없을 것 인 무엇인가. –

답변

5

CASE표현이므로 단일 유형의 단일 값을 계산합니다. 따라서 가능한 모든 THEN (및 ELSE)은 모두 단일 유형으로 변환 할 수있는 값을 생성해야합니다. THENvarchar이고 다른 하나는 int입니다.

intvarchar보다 높은 precedence이므로 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' 
+0

신속한 답변을 보내 주셔서 감사합니다. 오류가 발생하여 사용자가 소리를 지르는 순간이 발생했습니다. –

관련 문제