none
Coluna dinâmica em uma Select RRS feed

  • Pergunta

  • Boa tarde a todos!

    Estou desenvolvendo uma select e não estou tendo o resultado esperado, gostaria dependendo da situação de estar mudando o nome da coluna na clausula where, desta maneira

    Declare @coluna tipo_coluna, @value tipo

    set @coluna = 'nome_coluna'

    select * from Table where @coluna = @value

    Pesquisei muito mais não conseguir desenvolver

    Desde já muito obrigado!

    quarta-feira, 30 de novembro de 2016 15:55

Respostas

  • Olá Marcio,

    Você não pode tem como definir qual a coluna do banco que fará o filtro a partir de uma variável (Pelo menos não dessa forma).

    Uma sugestão é fazer toda  cláusula WHERE com condições de escape, ou seja, predefinir quais serão as colunas que poderão ser filtradas e colocar valores de escape caso não queira filtrar por ela.

    Exemplo:

    DECLARE @ValorColuna1 VARCHAR(50) = 'Teste'
    
    SELECT * FROM Tabela
    WHERE (Coluna1 = @ValorColuna1 OR @ValorColuna1 = '')

    Perceba que a query abaixo, filtrará a coluna Coluna1 com o texto que tiver na variável @ValorColuna1, porém eu adicionei um OR para que eu posso escolher por não filtrar essa coluna se eu passar um valor vazio na minha variável.

    Exemplo com mais de uma coluna

    DECLARE @ValorColuna1 VARCHAR(50) = ''
    DECLARE @ValorColuna2 INT = 3
    
    SELECT * FROM Tabela
    WHERE (Coluna1 = @ValorColuna1 OR @ValorColuna1 = '') AND 
          (Coluna2 = @ValorColuna2 OR @ValorColuna2 = 0)

    Nesse caso, tenho filtro por 2 colunas, porém se eu não desejar filtrar por nenhuma delas, basta passar os valores de escape para as variáveis, sendo que @ValorColuna1 vai ter que ser vazio e @ValorColuna2 será 0.

    Espero ter ajudado!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP quarta-feira, 30 de novembro de 2016 16:16
    • Marcado como Resposta Marcio Camargo quarta-feira, 30 de novembro de 2016 17:02
    quarta-feira, 30 de novembro de 2016 16:16

Todas as Respostas

  • Olá Marcio,

    Você não pode tem como definir qual a coluna do banco que fará o filtro a partir de uma variável (Pelo menos não dessa forma).

    Uma sugestão é fazer toda  cláusula WHERE com condições de escape, ou seja, predefinir quais serão as colunas que poderão ser filtradas e colocar valores de escape caso não queira filtrar por ela.

    Exemplo:

    DECLARE @ValorColuna1 VARCHAR(50) = 'Teste'
    
    SELECT * FROM Tabela
    WHERE (Coluna1 = @ValorColuna1 OR @ValorColuna1 = '')

    Perceba que a query abaixo, filtrará a coluna Coluna1 com o texto que tiver na variável @ValorColuna1, porém eu adicionei um OR para que eu posso escolher por não filtrar essa coluna se eu passar um valor vazio na minha variável.

    Exemplo com mais de uma coluna

    DECLARE @ValorColuna1 VARCHAR(50) = ''
    DECLARE @ValorColuna2 INT = 3
    
    SELECT * FROM Tabela
    WHERE (Coluna1 = @ValorColuna1 OR @ValorColuna1 = '') AND 
          (Coluna2 = @ValorColuna2 OR @ValorColuna2 = 0)

    Nesse caso, tenho filtro por 2 colunas, porém se eu não desejar filtrar por nenhuma delas, basta passar os valores de escape para as variáveis, sendo que @ValorColuna1 vai ter que ser vazio e @ValorColuna2 será 0.

    Espero ter ajudado!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Editado André SeccoMVP quarta-feira, 30 de novembro de 2016 16:16
    • Marcado como Resposta Marcio Camargo quarta-feira, 30 de novembro de 2016 17:02
    quarta-feira, 30 de novembro de 2016 16:16
  • Deleted
    quarta-feira, 30 de novembro de 2016 20:45