Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Huel

Conversion failed when converting the varchar value 'ZERO' to

Recommended Posts

:unsure: 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Vou postar aqui a forma que encontrei para sanar este problema, pois caso 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 Valoreas à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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.