Conversion failed when converting the varchar value ´ZERO´

SQL Server

14/03/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

Huelframil

Curtidas 0

Respostas

Huelframil

Huelframil

14/03/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:

[color=green:c8baafe2c0]-- Declaração de varíaveis:[/color:c8baafe2c0]
[color=blue:c8baafe2c0]DECLARE[/color:c8baafe2c0] @mensagem [color=blue:c8baafe2c0]VARCHAR(255)[/color:c8baafe2c0]
[color=blue:c8baafe2c0]DECLARE[/color:c8baafe2c0] @cd_aluno [color=blue:c8baafe2c0]INT[/color:c8baafe2c0]

[color=green:c8baafe2c0]-- Atribuindo Valores às variáveis:[/color:c8baafe2c0]
[color=blue:c8baafe2c0]SET[/color:c8baafe2c0] @mensagem = [color=red:c8baafe2c0]´´[/color:c8baafe2c0]
[color=blue:c8baafe2c0]SET[/color:c8baafe2c0] @cd_aluno = $cd_aluno

[color=green:c8baafe2c0]-- 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.[/color:c8baafe2c0]
[color=blue:c8baafe2c0]SELECT[/color:c8baafe2c0] @mensagem = @mensagem + (
[color=blue:c8baafe2c0]CASE[/color:c8baafe2c0] @mensagem
[color=blue:c8baafe2c0]WHEN [/color:c8baafe2c0][color=red:c8baafe2c0]´´ [/color:c8baafe2c0][color=blue:c8baafe2c0]THEN[/color:c8baafe2c0] [color=red:c8baafe2c0]´´ [/color:c8baafe2c0][color=blue:c8baafe2c0]ELSE[/color:c8baafe2c0] [color=red:c8baafe2c0]´´[/color:c8baafe2c0]
[color=blue:c8baafe2c0]END[/color:c8baafe2c0]) +
(
[color=green:c8baafe2c0]-- 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´[/color:c8baafe2c0]
[color=blue:c8baafe2c0]CASE WHEN [/color:c8baafe2c0](cur.carga_horaria = 0)
[color=blue:c8baafe2c0]THEN[/color:c8baafe2c0] [color=red:c8baafe2c0]´VALOR CADASTRADO INCORRETAMENTE´ [/color:c8baafe2c0]

[color=green:c8baafe2c0]-- Senão, o valor da carga horaria no banco que é int, será convertida para varchar:[/color:c8baafe2c0]
[color=blue:c8baafe2c0]ELSE[/color:c8baafe2c0] [color=violet:c8baafe2c0]CAST[/color:c8baafe2c0](cur.carga_horaria [color=blue:c8baafe2c0]AS VARCHAR[/color:c8baafe2c0])

[color=green:c8baafe2c0]-- Finalizando a estrutua CASE[/color:c8baafe2c0]
[color=blue:c8baafe2c0]END [/color:c8baafe2c0]
)

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

[color=green:c8baafe2c0]-- Mostrando na tela o resultado que a variável @mensagem está recebendo:[/color:c8baafe2c0]
[color=blue:c8baafe2c0]SELECT TOP 1[/color:c8baafe2c0]
[color=violet:c8baafe2c0]UPPER[/color:c8baafe2c0](@mensagem) [color=blue:c8baafe2c0]AS[/color:c8baafe2c0] quantidade_horas


GOSTEI 0
POSTAR