Conversion failed when converting the varchar value ´ZERO´

14/03/2008

0

:( 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

Responder

Posts

18/03/2008

Huelframil

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


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar