none
Could not convert the data value due to reasons other than sign mismatch or overflow. RRS feed

  • Pergunta

  • Erro ao enviar um campo varchar(max) do Sql server para o postgres (text) via Linked Server (Openquery).

    Origem: Sql Server Campo: varchar(max)

    Destino: Postgres Campo: text

    Erro: Could not convert the data value due to reasons other than sign mismatch or overflow.

    Quem souber de alguma coisa...


    Eriqeine

    sexta-feira, 24 de julho de 2015 18:56

Respostas

  • Eriqeine,

    Provavelmente o tamanho do campo que você esta enviando para o postgre é maior do que a capacidade de armazenamento do campo text.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 24 de julho de 2015 19:17
  • EriqEine,

    Como o Junior indicou, certamente ocorreu um overflow na sua coluna do Postgre porque o tamanho máximo de alocação do datatype "text" (físico) é de 1Gb e no SQL Server o "varchar(max)" pode alocar até 2Gb.

    Então os registros em que está coluna ultrapassa 1Gb no SQL Server vai gerar este erro ao tentar adicionar o conteúdo no Postgre. 

    Veja a documentação do PostGre e do SQL Server referente à este armazenamento:

    PostGreSQL

    http://www.postgresql.org/docs/9.1/static/datatype-character.html

    SQL Server

    https://msdn.microsoft.com/pt-br/library/ms176089.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !


    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 24 de julho de 2015 22:01
    Moderador
  • Deleted
    sexta-feira, 24 de julho de 2015 23:03

Todas as Respostas

  • Eriqeine,

    Provavelmente o tamanho do campo que você esta enviando para o postgre é maior do que a capacidade de armazenamento do campo text.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 24 de julho de 2015 19:17
  • EriqEine,

    Como o Junior indicou, certamente ocorreu um overflow na sua coluna do Postgre porque o tamanho máximo de alocação do datatype "text" (físico) é de 1Gb e no SQL Server o "varchar(max)" pode alocar até 2Gb.

    Então os registros em que está coluna ultrapassa 1Gb no SQL Server vai gerar este erro ao tentar adicionar o conteúdo no Postgre. 

    Veja a documentação do PostGre e do SQL Server referente à este armazenamento:

    PostGreSQL

    http://www.postgresql.org/docs/9.1/static/datatype-character.html

    SQL Server

    https://msdn.microsoft.com/pt-br/library/ms176089.aspx


    Se ajudou na sua solução, não esqueça de marcar como resposta !


    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 24 de julho de 2015 22:01
    Moderador
  • Deleted
    sexta-feira, 24 de julho de 2015 23:03
  • Os campos estão definidos da forma que falei acima, sendo que estou enviando apenas '123' como teste, e o resultado é este erro ai.



    Eriqeine

    segunda-feira, 27 de julho de 2015 16:29
  • Obrigada pela resposta, se desse o erro num registro que ultrapasse 1 Gb tudo bem, porém dá em qualquer inserção.

    Se quiserem podem fazer o teste, será que pode ser o driver? 

    Ou será que o Postgres "acha" que vai receber um registro que não suporta, e já dá o erro?

    Como posso resolver isso? uma vez que não posso alterar o tipo de dados no postgres?

    Eriqeine


    Eriqeine

    segunda-feira, 27 de julho de 2015 16:32
  • Eriqeine,

    Talvez seja isso mesmo, uma forma de tentar contonar é identificar através da função DataLength() existente no SQL Server o tamanho do dado que esta sendo enviado para o Postgre!!!!


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 28 de julho de 2015 19:13