Usuário com melhor resposta
Dúvida com EXE( ... )

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
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
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 SnippetDECLARE
@Variavel INTSET
@Variavel = 1DECLARE
@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 SnippetDECLARE
@Variavel INTSET
@Variavel = 1SELECT
Campo1 FROM Tabela WHERE CAMPO1 LIKECASE
@Variavel WHEN 1 THEN 'A%' ELSE 'B%' END[ ]s,
Gustavo
-
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 SnippetEXEC('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
-
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
-