none
Full text search - contains varias palavras RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma sp que traz como parametro uma string.
    Qdo a string é de so uma palavra, a clausula full text search "where contains" funciona perfeitamente.

    Ex:
    SELECT ID_link, titulo, ROW_NUMBER() OVER (ORDER BY ID_link) FROM clientes
    WHERE CONTAINS(chaves, @Keyword) 

    Mas e se o parametro (string) vem com 5 palavras ?
    Como fazer um for pra atender a sp independente da qtde de palavras, usando a where contains ?

    Valeu 

    quarta-feira, 18 de maio de 2011 04:44

Todas as Respostas

  • Gabriel, a solução abaixo resolve esta situação, se partirmos da premissa que suas informações estarão separadas por vírgula. Se elas estiverem separadas por algum caracter, não precisamos nem de While. Teste passando parâmetros dessa forma: 'PALAVRA1,PALAVRA2,PALAVRA3'.

    Create Procedure stp_SelecionaRegistros @Palavras VarChar(100) as
    Begin
      Declare @PalavrasParaBusca VarChar(150)
     
      Set @PalavrasParaBusca = '"' + Replace(@Palavras, ',', '" or "') + '"' 
     
      Select * From Produto Where Contains(NmProduto, @PalavrasParaBusca)
    End


    Roberson Ferreira


    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 18 de maio de 2011 11:23
  • Mas e o que separa as palavas sao os espacos em branco entre elas ?

    Neto

    quinta-feira, 19 de maio de 2011 04:05
  • Gabriel, um "espaço" é um caracter normal, da mesma forma que uma vírgula ou que um ponto é vírgula. Então basta você alterar neste script o caracter que será considerado o delimitador entre as palavras. Se perceber, na linha do comando "Set", eu retirei a vírgula e coloquei o espaço em branco. Agora, o parâmetro da procedure deve ser passado da seguinte forma: stp_SelecionaRegistros 'Palavra1 Palavra2 Palavra3'.

    Create Procedure stp_SelecionaRegistros @Palavras VarChar(100) as

    Begin

      Declare @PalavrasParaBusca VarChar(150)

      Set @PalavrasParaBusca = '"' + Replace(@Palavras, ' ', '" or "') + '"'

      Select * From Produto Where Contains(NmProduto, @PalavrasParaBusca)

    End


    Roberson Ferreira


    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 19 de maio de 2011 09:48
  • Gabriel,

    Você poderia tentar utilizar os comandos CharIndex e PatIndex para trabalhar com valores string.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 22 de maio de 2011 23:38
  • Gabriel, obteve sucesso em sua questão? Ainda há alguma dúvida sobre ela?

    Se estiver tudo ok, por favor, classifique as respostas que foram úteis. Isso poderá ajudar a outros usuários em pesquisas futuras.


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 29 de junho de 2011 22:56