Array
(
)

Conversion failed when converting the varchar value ´ZERO´

Huelframil
   - 14 mar 2008

:( Possuo uma tabela de Cursos que tem um campo Carga horária, que é do tipo int.
Só que quando este registro é cadastradado como 0 eu tenho que fazer aparecer a mensagem ´Erro de cadastro´.

Montei o seguinte:

SELECT DISTINCT case when carga_horaria = 0 then convert(varchar(4),´ZERO´ + convert(varchar(3),carga_horaria)) else carga_horaria end as teste
FROM D5ECurso

Mas aparece o seguinte erro:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value ´ZERO´ to data type int.

Como posso resolver isso?

O SQL é SQL Server 2005.

Huelframil
   - 18 mar 2008

Vou postar aqui a forma que encontrei para solucionar o caso, pois se uma outra pessoa se depare com este problema, possa vir a ajudar, foi a seguinte:

-- Declaração de varíaveis:
DECLARE @mensagem VARCHAR(255)
DECLARE @cd_aluno INT

-- Atribuindo Valores às variáveis:
SET @mensagem = ´´
SET @cd_aluno = $cd_aluno

-- Selecionando a variável mensagem, onde ela receberá o próprio valor + a condição (Caso a variável tenha seu conteúdo vazio, continuará vazia, caso contrário ficará vazia.
SELECT @mensagem = @mensagem + (
CASE @mensagem
WHEN ´´ THEN ´´ ELSE ´´
END) +
(
-- Como o valor de interesse é a carga horária para ser convertida, teremos:
-- Caso a carga_horaria seja 0 --> A mensagem que aparecerá no banco será ´VALOR CADASTRADO INCORRETAMENTE´
CASE WHEN (cur.carga_horaria = 0)
THEN ´VALOR CADASTRADO INCORRETAMENTE´

-- Senão, o valor da carga horaria no banco que é int, será convertida para varchar:
ELSE CAST(cur.carga_horaria AS VARCHAR)

-- Finalizando a estrutua CASE
END
)

-- Selecionando e juntando as tabelas que possuem os campos envolvidos:
FROM D5ECurso cur
INNER JOIN D5ETurma t ON t.cd_curso = cur.cd_curso
INNER JOIN D5EAluno a ON a.cd_turma = t.cd_turma
WHERE a.cd_aluno = $cd_aluno

-- Mostrando na tela o resultado que a variável @mensagem está recebendo:
SELECT TOP 1
UPPER(@mensagem) AS quantidade_horas