none
Dúvida com EXE( ... ) RRS feed

  • Pergunta

  •  

    Ola pessoal,

    Alguem poderia me dizer se é possivel fazer esse tipo de query e se sim como ficaria a where.

    DECLARE @Variavel AS INT

     

    SET @Variavel = 1


    EXEC('

    SELECT Campo1

    FROM Tabela

    WHERE Campo1 LIKE '''%''' CASE WHEN  '+ @Variavel + ' = 1 THEN 'A' ELSE 'B' END + '''%'''

    )

     

    Estou apanhando para ajustar a where.

     

     

     

    Se alguem souver como resolver esse problema agradeço.



    Abraçooooooooooo

    Valeu
    sexta-feira, 12 de dezembro de 2008 17:35

Respostas

  • Olá Fabianomr,

     

    Construa o comando em um variável VARCHAR e utilize a variável no EXEC (semelhante ao que eu fiz).

    Acredito que assim funcione.

     

    Code Snippet

    -- EXEMPLO 2

    DECLARE @strParametro AS VARCHAR(30), @strComando VARCHAR(100)

     

    SET @strParametro = '1'

    SET @strComando = 'SELECT * FROM tblPerfil WHERE dscPerfil LIKE ''%' + CASE WHEN @strParametro = '1' THEN '1' ELSE '2' END + '%'''

     

    EXEC(@strComando)

     

    [ ]s,

     

    Gustavo

    sexta-feira, 12 de dezembro de 2008 18:22

Todas as Respostas

  • Boa Tarde,

     

    Como a variável é do tipo INT e você quer concatenar, você terá que convertê-la para VARCHAR usando um CAST ou um CONVERT. Acho que você está querendo fazer algo do tipo:

     

    Code Snippet

    DECLARE @Variavel INT

    SET @Variavel = 1

     

    DECLARE @cmdSQL VARCHAR(100)

    SET @cmdSQL = 'SELECT Campo1 FROM Tabela WHERE ' +

    'Campo1 LIKE ' + '''' + CASE @Variavel WHEN 1 THEN 'A' ELSE 'B' END + '%' + ''''

     

    EXEC(@cmdSQL)

     

    Em todo caso, acredito que não seja necessário utilizar a SQL dinâmica para fazer isso. Tente a construção abaixo:

     

    Code Snippet

    DECLARE @Variavel INT

    SET @Variavel = 1

    SELECT Campo1 FROM Tabela WHERE CAMPO1 LIKE

    CASE @Variavel WHEN 1 THEN 'A%' ELSE 'B%' END

     

     

    [ ]s,

     

    Gustavo

    sexta-feira, 12 de dezembro de 2008 17:44
  • Fala Gustavo, obrigado por tentar me ajudar.

    Mas ainda estou com problema, bom antes vou explicar toda a história de eu ter que fazer dessa forma.

    1 - Eu tinha uma proc onde eu passava dois parametros, Tipo e Valor, onde no tipo eu identifica o tipo de campo que a    pessoa quer filtrar e o Valor é o argumento do filtro. Com isso na where eu tinha where campo like '%' + case ....

    Ai depois tive que passar como parametro a forma de ordenação dos registros, ai danou-se tudo.

    Pois pra não ficar replicando a mega query para cada ordenação, o que eu fiz foi transformar a query em string, e no fim da string eu indoco a ordenação  e mando executar.

     

    seria + - isso

    Code Snippet
    EXEC('SELECT CAMPO FROM TABELA ORDER BY ' + strOrderm)

     

     

     

    Code Snippet

    -- EXEMPLO 1

    DECLARE @strParametro AS VARCHAR(30)

    SET @strParametro = '1'

    EXEC('SELECT * FROM tblPerfil WHERE dscPerfil LIKE ''%' + @strParametro + '%''')

     

     

     

     

    Code Snippet

    -- EXEMPLO 2

    DECLARE @strParametro AS VARCHAR(30)

    SET @strParametro = '1'

    EXEC('SELECT * FROM tblPerfil WHERE dscPerfil LIKE ''%' + CASE WHEN @strParametro = '1' THEN '1' ELSE '2' END + '%''')

     

     

    Nos exemplos acima o primeiro exemplo funciona, agora quando eu coloco um 'case' no meio, ai ja da erro.

    Incorrect syntax near the keyword 'CASE'.

     

    Resumindo, tudo isso por causa do order by

     

    Seria que existe um caminho melhor ou mais facil ?

    Valeu

     




        

    sexta-feira, 12 de dezembro de 2008 18:11
  • Olá Fabianomr,

     

    Construa o comando em um variável VARCHAR e utilize a variável no EXEC (semelhante ao que eu fiz).

    Acredito que assim funcione.

     

    Code Snippet

    -- EXEMPLO 2

    DECLARE @strParametro AS VARCHAR(30), @strComando VARCHAR(100)

     

    SET @strParametro = '1'

    SET @strComando = 'SELECT * FROM tblPerfil WHERE dscPerfil LIKE ''%' + CASE WHEN @strParametro = '1' THEN '1' ELSE '2' END + '%'''

     

    EXEC(@strComando)

     

    [ ]s,

     

    Gustavo

    sexta-feira, 12 de dezembro de 2008 18:22
  • Olá Gustavo, realmente dessa forma funcionou.

    Valeu brother
    Muito Obrigado pela ajuda

     

    sexta-feira, 12 de dezembro de 2008 18:27