none
Where condicional, é possível? RRS feed

  • Pergunta

  • Olá, estou precisando fazer a seguinte instrução sql.

    de acordo com o valor de uma variável q declarei, eu quero fazer o where condicional, tem como fazer isso???

    seria alguma coisa como esta aí embaixo só de exemplo, só q com if não da certo, alguem sabe como fazer isso??

    if @qtd = 1
    begin
          where id = 1
    end
    if @qtd = 2
    begin
         where id = 2
    end

    obrigado
    segunda-feira, 25 de janeiro de 2010 13:13

Respostas

  • ou caso os valores sejam diferentes da condição vc pode utilizar uma consulta dinâmica ou um case.

    --consulta dinâmica
    declare @sql nvarchar(max)
    
    set @sql = N'select * from "suaTabela" where ID = '
    if @qtd = 1
    begin
        set @sql = @sql + '1'
    end
    if @qtd = 2
    begin
        set @sql = @sql + '2'
    end
    
    exec sp_executesql @sql
    
    
    -- Com case
    select * from "suaTabela" where ID = (case @qtd when 1 then 1 when 2 then 2 end)

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    segunda-feira, 25 de janeiro de 2010 13:30

Todas as Respostas

  • Defacer, no exemplo q vc utilizou é so utilizar o valor da própria variável no where

    where id = @qtd
    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    segunda-feira, 25 de janeiro de 2010 13:23
  • ou caso os valores sejam diferentes da condição vc pode utilizar uma consulta dinâmica ou um case.

    --consulta dinâmica
    declare @sql nvarchar(max)
    
    set @sql = N'select * from "suaTabela" where ID = '
    if @qtd = 1
    begin
        set @sql = @sql + '1'
    end
    if @qtd = 2
    begin
        set @sql = @sql + '2'
    end
    
    exec sp_executesql @sql
    
    
    -- Com case
    select * from "suaTabela" where ID = (case @qtd when 1 then 1 when 2 then 2 end)

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    segunda-feira, 25 de janeiro de 2010 13:30
  • deu, certo, era isso msm, vlw
    segunda-feira, 25 de janeiro de 2010 13:47
  • Defacer, valeu pelo retorno.
    se possível qd puder classifique o post.


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    segunda-feira, 25 de janeiro de 2010 13:59
  • Defacer,

    Eu utilizo muito o Case dentro do Select, pois realizo a tratamento dentro da mesma estrutura de código, mas tanto o IF como o Case são soluções práticas e simples.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 25 de janeiro de 2010 23:24
  • Dá pra resolver também somente com operações lógicas dentro do próprio where...

    Ex.:

    where
      (
        (@qtd = 1 and id = 1) or
        (@qtd = 2 and id = 2)
      )


    terça-feira, 26 de janeiro de 2010 15:41