none
Problema na Concatenação de Campos no SQL SERVER 2008R2 RRS feed

  • Pergunta

  • Bom dia,

    Eu estou tentando concatenar dois campos na minha tabela de endereços, esses dois campos seriam: Logradouro e Endereço

    O select é:

    SELECT (CdLog+' '+Ender) AS 'Endereço'
    FROM EndCli
    WHERE NrContrCli = '200300418726'

    Ao invés de resultar isso: AV Paulista
    O resultado é esse: AV

    Ou seja, o valor do segundo campo não aparece, se eu fizer isso:

    SELECT (Ender+' '+CdLog) AS 'Endereço'
    FROM EndCli
    WHERE NrContrCli = '200300418726'

    Ao invés de resultar isso:AV Paulista
    O resultado é esse:Paulista

    Obs: Os dois campo são do tipo: CdLog VARCHAR(10) e Ender VARCHAR(40)

    Obrigado.

    quarta-feira, 14 de agosto de 2013 16:58

Todas as Respostas

  • Boa tarde  Wylliam,

    Como os dois campos são de tipos iguais e supondo que no resultado que você está esperando as duas colunas contenham valores (e não contenham nulos) a sua concatenação tanto com ou sem parênteses está correta.

    É bem estranho ocorrer tal erro.


    - :)

    quarta-feira, 14 de agosto de 2013 17:32
  • Pois é Renato, não consigo entender como isso é possível.

    Eu fiz a consulta sem nenhum filtro, apenas o select mesmo, o que me retornou foi alguns registros com esse mesmo problema e o restante apresentou normalmente a concatenação.

    Mesmo os dois campos sendo VARCHAR eu fiz um CAST e um CONVERT mas não seu certo... Tentei um LTRIM junto com RTRIM para retirar os espaços em branco, mas nada funcionou.

    Obs: Lembrando que os dois campos não são nulos ou vazios.

    quarta-feira, 14 de agosto de 2013 17:45
  • Wylliam, como o Renato disse realmente é muito estranho, acabei de fazer um teste com a sua query em um SQL 2008R2 tambem e funcionou normalmente, tente fazer o teste abaixo colocando os 2 campos que fazem a concatenação e nos de alguns exemplos que funcionam e que não funcionam:

    Create table #teste (cdlog varchar(10), Ender varchar(40))
    
    insert into #teste
    select 'AV','Paulista'
    
    SELECT (CdLog+' '+Ender) AS 'Endereço'
    from #teste
    
    -- Resultado: AV Paulista 
    
    -- tente este teste para verificar se os dados estao realmente corretos:
    
    SELECT CdLog,Ender, (CdLog+' '+Ender) AS 'Endereço'
    from #teste
    


    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 14 de agosto de 2013 17:51
  • SELECT CdLog,Ender, (CdLog+' '+Ender) AS 'Endereço'
    FROM EndCli 
    WHERE NrContrCli = '200300418726'

    Tentei essa query ai e me retorna isso:

    | CdLog |   Ender     |   Endereço

    | AV       |   Paulista  |   AV

    invertento os campos apresenta isso:

    SELECT CdLog,Ender, (Ender+' '+CdLog) AS 'Endereço'
    FROM EndCli 
    WHERE NrContrCli = '200300418726'

    CdLog |   Ender     |   Endereço

    | AV       |   Paulista  |   Paulista  

    Se eu coloco assim:

    SELECT (Ender+',') AS 'Endereço'
    FROM EndCli 
    WHERE NrContrCli = '200300418726'

    Retorna isso sem a ",":

    |   Endereço

    | Paulista  



    quarta-feira, 14 de agosto de 2013 18:12
  • Wylliam,

    Você executou a mesma query do Alexandre? Ela é extremamente importante pra verificar se esse comportamento de concatenação também é observado na tempdb.

    Por favor, execute esse também as queries abaixo e poste o resultado.

    SELECT COLUMN_NAME,DATA_TYPE,COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS SC
    WHERE TABLE_NAME = 'EndCli'
    AND COLUMN_NAME IN ('Ender','CdLog')
    SELECT SERVERPROPERTY('Collation')

    Essas duas são um diagnóstico pra confirmar algumas informações de metadados (acredito que não tenha nada nesse aspecto, mas não custa confirmar).

    Att


    - :)




    quarta-feira, 14 de agosto de 2013 18:22
  • Fiz exatamente como você me indicou... Deu certo.

    Resultado 

    SELECT CdLog,Ender, (CdLog+' '+Ender) AS 'Endereço'
    from #teste

    | Endereço |

    |AV Paulista|

    quarta-feira, 14 de agosto de 2013 18:31
  • O resultado para os dois registros foram esses:

    Endcli;        varchar;         Latin1_General_CI_AS;

    quarta-feira, 14 de agosto de 2013 18:34
  • SELECT SERVERPROPERTY('Collation')

    Resultado:

    Latin1_General_CI_AS

    quarta-feira, 14 de agosto de 2013 18:42
  • Wylliam,

    O SELECT do Alexandre ter retornado o resultado esperado indica que o problema na concatenação não ocorre em toda a instância. Já as minhas queries não mostraram nada que pudesse invalidar a consulta.

    Realmente não sei qual é o problema que está ocorrendo no seu ambiente. Tal comportamento é inédito.


    - :)



    quarta-feira, 14 de agosto de 2013 19:13
  • Concordo com o Renato, acredito que devemos ver outras questões de bugs especificos, voce esta com o ultimo SP instalado com os cumulative updates em dia ?

    Se sim e voce possui a licensa do SQL original vale a pena até abrir um chamado na propria MS para ver o que eles falam sobre isto.


    Alexandre Matayosi Conde Mauricio.

    • Sugerido como Resposta Renato Siqueira quarta-feira, 14 de agosto de 2013 19:43
    quarta-feira, 14 de agosto de 2013 19:16
  • Estou com a versão:

    Microsoft SQL Server Standard Edition (64-bit) 10.50.1600.1

    Hoje após o expediente o responsável pelo banco irá procurar por atualizações para ver se há alguma. Amanhã eu volto a procurar mais alguma solução... Obrigado pela ajuda, mas fica ai em aberto o tópico para mais sugestões... Quanto mais opiniões melhor.

    Obs: A empresa aqui tem a licença original do SQL Server.

    quarta-feira, 14 de agosto de 2013 20:01
  • Wylliam,

    Haviam atualizações para serem feitas? Já entrou em contato com a MS?

    Att


    - :)

    sábado, 17 de agosto de 2013 14:30