none
Ajuda COALESCE RRS feed

  • Pergunta

  • Boa tarde Amigos, 

    Gostaria de saber se alguem pode me ajudar e se é possivel fazer o que quero fazer.

    Tenho o seguinte codigo

    DECLARE @codigo  varchar(10)
    set @codigo = ''
    
    select TER12.TerDoc, TER12.TerBRepCod from ter12 WHERE TerBRepCod = COALESCE(NULLIF(@codigo,0), TerBRepCod)

    Quando passo o valor de @codigo = ' ' ele me retorna todos os registros que sejam maior ou igual a 0, eu gostaria que alem de retornar os que são igual ou maior que zero me retornasse tambem os registros NULL 

    Sera isso possivel ?

    Obrigado

    Juliano Landim

    sexta-feira, 21 de fevereiro de 2014 21:09

Respostas

  • Muito obrigado Durval, eu tentei e esta dando o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near '='.

    Tentei tirar um I do IF , (pois vc colocou IIF , nao sei se esta certo) e deu o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near the keyword 'IF'.

    Abraço

    Juliano Landim

    Juliano,

    O comando IIF faz parte dos novos recursos T-SQL no SQL Server 2012 e eu pensei que era esta a versão que você estava trabalhando.

    De qualquer forma, mesmo você trabalhando em um ambiente "alternativo" você deve conseguir utilizar a consulta com CASE no lugar do IIF.

    Segue o modelo abaixo para você adaptar no seu script:

    DECLARE @codigo  varchar(10)
    set @codigo = ''
    
    
    SELECT TER12.TerDoc, TER12.TerBRepCod 
    FROM ter12 
    WHERE TerBRepCod = COALESCE(@codigo, 
    (CASE WHEN @codigo = '' THEN 0
          ELSE NULL END), 
    TerBRepCod)
     

    Caso você queira saber mais sobre os comandos:

    - IIF ( http://technet.microsoft.com/pt-br/library/hh213574.aspx )

    - CASE ( http://technet.microsoft.com/pt-br/library/ms181765(v=sql.100).aspx )

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

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta JulianoLandim sábado, 22 de fevereiro de 2014 05:18
    sábado, 22 de fevereiro de 2014 02:12
    Moderador

Todas as Respostas

  • Deleted
    sexta-feira, 21 de fevereiro de 2014 22:12
  • Obrigado por responder, mas preciso de algo que seja feito com o COALESCE, pois quando eu nao impormar nenhum valor para TerBRepCod ele me traz todos os registros, inclusive os null.

    []'s

    sexta-feira, 21 de fevereiro de 2014 23:02
  • Obrigado por responder, mas preciso de algo que seja feito com o COALESCE, pois quando eu nao impormar nenhum valor para TerBRepCod ele me traz todos os registros, inclusive os null.

    []'s

    Juliano,

    Tente executar o script abaixo para verificar se atende à estes requisitos que você precisa.

    DECLARE @codigo  varchar(10)
    set @codigo = ''
    
    SELECT TER12.TerDoc, TER12.TerBRepCod 
    FROM ter12 
    WHERE TerBRepCod = COALESCE(@codigo, IIF(@codigo = '',0, NULL), TerBRepCod)

    Para maiores informações sobre o uso do COALESCE, veja o link abaixo:

    http://msdn.microsoft.com/pt-br/library/ms190349.aspx

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

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sábado, 22 de fevereiro de 2014 00:05
    Moderador
  • Muito obrigado Durval, eu tentei e esta dando o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near '='.

    Tentei tirar um I do IF , (pois vc colocou IIF , nao sei se esta certo) e deu o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near the keyword 'IF'.

    Abraço

    Juliano Landim

    sábado, 22 de fevereiro de 2014 01:56
  • Muito obrigado Durval, eu tentei e esta dando o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near '='.

    Tentei tirar um I do IF , (pois vc colocou IIF , nao sei se esta certo) e deu o seguinte erro

    Error : [FreeTDS][SQL Server]Incorrect syntax near the keyword 'IF'.

    Abraço

    Juliano Landim

    Juliano,

    O comando IIF faz parte dos novos recursos T-SQL no SQL Server 2012 e eu pensei que era esta a versão que você estava trabalhando.

    De qualquer forma, mesmo você trabalhando em um ambiente "alternativo" você deve conseguir utilizar a consulta com CASE no lugar do IIF.

    Segue o modelo abaixo para você adaptar no seu script:

    DECLARE @codigo  varchar(10)
    set @codigo = ''
    
    
    SELECT TER12.TerDoc, TER12.TerBRepCod 
    FROM ter12 
    WHERE TerBRepCod = COALESCE(@codigo, 
    (CASE WHEN @codigo = '' THEN 0
          ELSE NULL END), 
    TerBRepCod)
     

    Caso você queira saber mais sobre os comandos:

    - IIF ( http://technet.microsoft.com/pt-br/library/hh213574.aspx )

    - CASE ( http://technet.microsoft.com/pt-br/library/ms181765(v=sql.100).aspx )

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

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta JulianoLandim sábado, 22 de fevereiro de 2014 05:18
    sábado, 22 de fevereiro de 2014 02:12
    Moderador
  • Deu certo !!! Muito obrigado 

    Abraço !!!

    Juliano Landim

    sábado, 22 de fevereiro de 2014 05:19
  • Deleted
    sábado, 22 de fevereiro de 2014 10:16