Usuário com melhor resposta
Conversion failed when converting the varchar to data type int

Pergunta
-
Bom dia galera,
Estou tentando fazer um comando, aparentemente simples porem está dando erro.
select a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on (a.IdAtendimento= an.IdEntidadeOrigem) where a.Idtipoatendimento = '00A000000N'
Erro:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '00A000000O' to data type int.Acredito que o erro está no Where, pois eu fiz com outra condição e passou, mas com essa ai que eu realmente preciso não ta indo.
O idtipoatendimento é um campo do tipo (identificador(char(10)),null)
Abraços.
Respostas
-
Deleted
- Marcado como Resposta Alex_SidFiscal sexta-feira, 3 de janeiro de 2020 16:05
-
Alex,
Estou entrando no post para tentar ajudar. Respondendo a sua pergunta no post anteriormente, tendo como base o resultado que você apresentou:
TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH
Anexo IdEntidadeOrigem char 10
Atendimento IdTipoAtendimento char 10
Atendimento IdEntidadeOrigem char 10
Atendimento IdAtendimento int NULL- Uma alternativa na muito interessante seria fazer uso da função Convert ou Cast na condição da sua junção.
Veja o exemplo:
-- Utilizando a Função Convert -- select a.idatendimento, an.IdEntidadeOrigem --, a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on Convert(Char(10),a.IdAtendimento) = Convert(Char(10),an.IdEntidadeOrigem) where an.IdEntidadeOrigem = '8183' Go -- Utilizando a Função Cast -- select a.idatendimento, an.IdEntidadeOrigem --, a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on Cast(a.IdAtendimento As Char(10)) = Cast(an.IdEntidadeOrigem As Char(10)) where an.IdEntidadeOrigem = '8183' Go
Reforço a observação feito pelo outro argumentandor, você esta utilizando em uma condição de junção tipos de dados diferentes, comparando Char(10) com INT, isso esta obrigatoriamente forçando o Query Processor a realizar a conversão implícita para estabelecer um formato reconhecível e que permita ser comparado.
Neste caso, valide a sua condição de junção ou até mesmo se for possível poderia alterar fisicamente o tipo de dados utilizado na tabela Atendimento para o atribuito IdAtendimento, deixando o mesmo similar ao que esta sendo utilizando na tabela Anexo.
Veja o exemplo abaixo:
-- Alterando o tipo de dados -- Alter Table Atendimento Alter Column IDAtendimento Char(10) Go
Este procedimento vai funcionar se os dados atualmente armazenados na coluna IDAtendimento permitam ser alterados para Char(10).Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Alex_SidFiscal sexta-feira, 3 de janeiro de 2020 16:06
Todas as Respostas
-
-
-
-
é sim.
select a.idatendimento, an.IdEntidadeOrigem --, a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on (a.IdAtendimento= an.IdEntidadeOrigem) where an.IdEntidadeOrigem = '8183'
rodando o comando dessa forma ele traz o resultado.
idatendimento IdEntidadeOrigem
8183 8183
8183 8183
8183 8183Então como converter para que o from se relacione corretamente?
-
Deleted
- Marcado como Resposta Alex_SidFiscal sexta-feira, 3 de janeiro de 2020 16:05
-
Alex,
Estou entrando no post para tentar ajudar. Respondendo a sua pergunta no post anteriormente, tendo como base o resultado que você apresentou:
TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH
Anexo IdEntidadeOrigem char 10
Atendimento IdTipoAtendimento char 10
Atendimento IdEntidadeOrigem char 10
Atendimento IdAtendimento int NULL- Uma alternativa na muito interessante seria fazer uso da função Convert ou Cast na condição da sua junção.
Veja o exemplo:
-- Utilizando a Função Convert -- select a.idatendimento, an.IdEntidadeOrigem --, a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on Convert(Char(10),a.IdAtendimento) = Convert(Char(10),an.IdEntidadeOrigem) where an.IdEntidadeOrigem = '8183' Go -- Utilizando a Função Cast -- select a.idatendimento, an.IdEntidadeOrigem --, a.dsassunto, an.nmarquivo, p.cdchamada, p.nmpessoa from Atendimento a left join pessoa p on (a.idpessoa = p.idpessoa) inner join anexo an on Cast(a.IdAtendimento As Char(10)) = Cast(an.IdEntidadeOrigem As Char(10)) where an.IdEntidadeOrigem = '8183' Go
Reforço a observação feito pelo outro argumentandor, você esta utilizando em uma condição de junção tipos de dados diferentes, comparando Char(10) com INT, isso esta obrigatoriamente forçando o Query Processor a realizar a conversão implícita para estabelecer um formato reconhecível e que permita ser comparado.
Neste caso, valide a sua condição de junção ou até mesmo se for possível poderia alterar fisicamente o tipo de dados utilizado na tabela Atendimento para o atribuito IdAtendimento, deixando o mesmo similar ao que esta sendo utilizando na tabela Anexo.
Veja o exemplo abaixo:
-- Alterando o tipo de dados -- Alter Table Atendimento Alter Column IDAtendimento Char(10) Go
Este procedimento vai funcionar se os dados atualmente armazenados na coluna IDAtendimento permitam ser alterados para Char(10).Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Alex_SidFiscal sexta-feira, 3 de janeiro de 2020 16:06
-
-
obrigado, agora foi certinho.
Alex,
Que bom, ficamos a disposição.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]