none
consulta em vários campos RRS feed

  • Pergunta

  • Gostaria de saber se tem como fazer um consulta em todos os campos sempre precisar ficar colocando or em todos

    Exemplo
    create table #livros
    (
        autor nvarchar(100),
        titulo nvarchar(100),
        assunto nvarchar(100)

        E mais 28 campos
        
    )

    insert #livros (autor, titulo, assunto) values ('paulo', 'josé da silva','história')

    Gostaria de saber se tem pesquisar josé em todas as colunas sem precisar ficar colocando or campo or campo or campo or

    select * from #livros

    where autor = 'jose' or titulo = 'jose' or assunto = 'jose'

    Obrigado
    quarta-feira, 11 de abril de 2007 12:40

Todas as Respostas

  •  

    Se o conteúdo texto for muito grande você pode usar o recurso de full text index, mas se não for, é assim mesmo. Mas isso é terrível para indexação.

     

    []'s

    quarta-feira, 11 de abril de 2007 12:55
  • Bom dia Fábio

     

     

    Você pode criar uma SP para fazer isso, contudo não recomendo pois você pode comprometer e muito a sua performance. Também sugiro que você restrinja ao máximo a utilização do operador OR por questões de performance. Creio que seja mais interessante você desenvolver um componente para fazer esta verificação baseado no conteúdo de um DATASET e não diretamente no Banco.

     

     

     

     

     

    Espero ter ajudado

    quarta-feira, 11 de abril de 2007 13:01
  •  

     

     tente

     

     select * from tabela where campo1+campo2+campo3 like '%chave pesquisa%'

     

    abs;

    quarta-feira, 11 de abril de 2007 13:03
  • Fabio,

     

    Se você não estiver trabalhando com Full Text Index, não terá muita escolha, pois ficar utilizando muitos operadores pode também ocasionar inconsistência em seu result set.

     

    Aqui na empresa uma vez eu precisei fazer algo similar, para isso criei um campo do tipo text, e neste campo e inserir o valor dos outros campos varchar, em meu select determinei a busca do contêudo que eu desejava dentro de campo.

     

    Talvez isso pode ser uma possibilidade.

    quarta-feira, 11 de abril de 2007 13:11
  • Olá Fábio,

     

    Segue abaixo um exemplo de uma procedure que monta a query com todos campos da tabela especificada. Vale ressaltar que isso não é bom para perfomance de suas queries como já dito anteriormente.

     

     

    -- Criação da procedure
    create procedure sp_exemplo (@parametro varchar(10),@tabelaTemp varchar(15))
    as
    begin
    declare @campo varchar(20),@query nvarchar(4000)
    select @query='Select * from
    '+@tabelaTemp+' where '

    declare aux cursor for
    select b.name from tempdb.dbo.sysobjects a
    inner join tempdb.dbo.syscolumns b on a.id=b.id
    where a.name like @tabelaTemp+'%'

    open aux
    fetch next from aux into @campo
    while @@fetch_status=0
      begin
        set @query = @query +'cast(' + @campo+' as varchar)='''+@parametro + ''' or '      
      fetch next from aux into @campo
      end
     set @query = substring(@query,1,len(@query)-2)
     exec sp_executesql @query
    deallocate aux
    end

    -- Execução da procedure
    sp_exemplo 'jose', '#livros'

     

    Espero ter ajudado
    quarta-feira, 11 de abril de 2007 16:52
  • Senhores, utilizei o Full Text Index e ficou ótimo, agora gostaria de saber como posso habilitar a pesquisa com acento e sem acento ?
    quarta-feira, 11 de abril de 2007 16:58
  • Fabio,

     

    Obrigado pelo retorno.

     

    Se precisar estamos a disposição.

    quarta-feira, 11 de abril de 2007 17:32