Partilhar via


CONTAINS (Transact-SQL)

Procura correspondências precisas ou difusas (menos precisas) para palavras e frases únicas, palavras em uma certa distância entre si ou correspondências ponderadas. CONTAINS é um predicado usado na cláusula WHERE de uma instrução SELECT Transact-SQL para executar uma pesquisa de texto completo do SQL Server em colunas indexadas de texto completo que contêm tipos de dados baseados em caractere.

CONTAINS pode pesquisar:

  • Uma palavra ou frase.

  • O prefixo de uma palavra ou frase.

  • Uma palavra próxima a outra.

  • Uma palavra gerada a partir de outra por flexão (por exemplo, a palavra guia é uma raiz flexional de guiar, guiou, guiando e guiado).

  • Uma palavra que é sinônima de outra usando um dicionário de sinônimos (por exemplo, a palavra "metal" pode ter sinônimos, como "alumínio" e "aço").

ObservaçãoObservação

Para obter informações sobre os formulários de pesquisas de texto completo que têm suporte no SQL Server, consulte Consulta com pesquisa de texto completo.

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

CONTAINS ( 
     { 
        column_name | ( column_list ) 
      | * 
      | PROPERTY ( { column_name }, 'property_name' )  
     } 
     , '<contains_search_condition>'
     [ , LANGUAGE language_term ]
   ) 

<contains_search_condition> ::= 
  { 
      <simple_term> 
    | <prefix_term> 
    | <generation_term> 
    | <generic_proximity_term> 
    | <custom_proximity_term> 
    | <weighted_term> 
    } 
  | 
    { ( <contains_search_condition> ) 
        [ { <AND> | <AND NOT> | <OR> } ] 
        <contains_search_condition> [ ...n ] 
  } 
<simple_term> ::= 
     { word | "phrase" }

<prefix term> ::= 
  { "word*" | "phrase*" }

<generation_term> ::= 
  FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] ) 

<generic_proximity_term> ::= 
  { <simple_term> | <prefix_term> } { { { NEAR | ~ } 
     { <simple_term> | <prefix_term> } } [ ...n ] }

<custom_proximity_term> ::= 
  NEAR ( 
     {
        { <simple_term> | <prefix_term> } [ ,…n ]
     |
        ( { <simple_term> | <prefix_term> } [ ,…n ] ) 
      [, <maximum_distance> [, <match_order> ] ]
     }
       ) 

      <maximum_distance> ::= { integer | MAX }
      <match_order> ::= { TRUE | FALSE } 

<weighted_term> ::= 
  ISABOUT 
   ( { 
        { 
          <simple_term> 
        | <prefix_term> 
        | <generation_term> 
        | <proximity_term> 
        } 
      [ WEIGHT ( weight_value ) ] 
      } [ ,...n ] 
   ) 

<AND> ::= 
  { AND | & }

<AND NOT> ::= 
  { AND NOT | &! }

<OR> ::= 
  { OR | | }

Argumentos

  • column_name
    É o nome de uma coluna indexada de texto completo da tabela especificada na cláusula FROM. As colunas podem ser do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary ou varbinary(max).

  • column_list
    Especifica duas ou mais colunas, separadas por vírgulas. column_list deve ser incluído entre parênteses. A menos que language_term esteja especificado, o idioma de todas as colunas de column_list deve ser o mesmo.

  • *
    Especifica que a consulta pesquisará todas as colunas indexadas de texto completo na tabela especificada na cláusula FROM para o critério de pesquisa determinado. As colunas na cláusula CONTAINS devem se originar de uma única tabela que tenha um índice de texto completo. A menos que language_term seja especificado, o idioma de todas as colunas da tabela deve ser o mesmo.

  • PROPERTY (column_name, 'property_name')
    Especifica uma propriedade de documento na qual procurar o critério de pesquisa especificado.

    Observação importanteImportante

    Para retornar qualquer linha, devem ser especificados property_name na lista de propriedades de pesquisa do índice de texto completo e o índice de texto completo para a consulta deve conter entradas específicas a propriedade para property_name. Para obter mais informações, consulte Pesquisar propriedades de documento com listas de propriedades de pesquisa.

  • LANGUAGE language_term
    É o idioma a ser usado para remoção de separação de palavras, lematizações, expansões e substituições de dicionários de sinônimos e palavra de ruído (ou palavra irrelevante) como parte da consulta. Esse parâmetro é opcional.

    Se os documentos de idiomas diferentes forem armazenados juntos como BLOBs (objetos binários grandes) em uma única coluna, o LCID (identificador de localidade) de um determinado documento determinará qual idioma usar para indexar seu conteúdo. Ao consultar esse tipo de coluna, se você especificar LANGUAGE language_term poderá aumentar a probabilidade de uma boa correspondência.

    language_term pode ser especificado como uma cadeia de caracteres, um valor inteiro ou hexadecimal que corresponda ao LCID (identificador local) de um idioma. Se language_term for especificado, o idioma que ele representa será aplicado a todos os elementos do critério de pesquisa. Se nenhum valor for especificado, o idioma de texto completo da coluna será usado.

    Quando especificado como uma cadeia de caracteres, language_term corresponde ao valor da coluna alias na exibição de compatibilidade de sys.syslanguages (Transact-SQL). A cadeia de caracteres deve estar entre aspas simples, como em 'language_term'. Quando especificado como um inteiro, language_term é o LCID real que identifica o idioma. Quando especificado como um valor hexadecimal, language_term é 0x seguido pelo valor hexadecimal do LCID. O valor hexadecimal não deve exceder oito dígitos, incluindo zeros à esquerda.

    Se o valor estiver no formato DBCS (conjunto de caracteres de dois bytes), o SQL Server o converterá em Unicode.

    Se o idioma especificado não for válido ou se não houver nenhum recurso instalado que corresponda ao idioma, o SQL Server retornará um erro. Para usar os recursos de idioma neutros, especifique 0x0 como language_term.

  • <contains_search_condition>
    Especifica o texto a ser pesquisado em column_name e as condições para uma correspondência.

    <contains_search_condition> é nvarchar. Uma conversão implícita acontece quando outro tipo de dados de caractere é usado como entrada. No exemplo a seguir, a variável @SearchWord, que está definida como varchar(30), causa uma conversão implícita no predicado CONTAINS.

    USE AdventureWorks2012;
    GO
    DECLARE @SearchWord varchar(30)
    SET @SearchWord ='performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE CONTAINS(Description, @SearchWord);
    

    Como a "detecção de parâmetro" não funciona em conversão, use nvarchar para obter um melhor desempenho. No exemplo, declare @SearchWord como nvarchar(30).

    USE AdventureWorks2012;
    GO
    DECLARE @SearchWord nvarchar(30)
    SET @SearchWord = N'performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE CONTAINS(Description, @SearchWord);
    

    Você também pode usar a dica de consulta OPTIMIZE FOR para casos em que é gerado um plano não ideal.

  • word
    É uma cadeia de caracteres sem espaços ou pontuação.

  • phrase
    É uma ou mais palavras com espaços entre cada uma.

    ObservaçãoObservação

    Alguns idiomas, como aqueles escritos em algumas regiões da Ásia, podem ter frases que consistem em uma ou mais palavras sem espaços entre elas.

  • <simple_term>
    Especifica uma correspondência para uma palavra ou frase exata. Exemplos de termos simples válidos são "blue berry", "blueberry" e "Microsoft SQL Server." As frases devem estar entre aspas duplas (""). As palavras em uma frase devem aparecer na mesma ordem conforme especificado em <contains_search_condition> pois elas aparecem na coluna do banco de dados. A pesquisa de caracteres na palavra ou frase não diferencia maiúsculas e minúsculas. As palavras de ruído (ou palavras irrelevantes) (como um, e ou o) em colunas indexadas de texto completo não são armazenadas no índice de texto completo. Se uma palavra de ruído for usada em uma pesquisa de uma palavra única, o SQL Server retornará uma mensagem de erro indicando que a consulta contém apenas palavras de ruído. O SQL Server inclui uma lista padrão de palavras de ruído no diretório \Mssql\Binn\FTERef de cada instância do SQL Server.

    A pontuação é ignorada. Portanto, CONTAINS(testing, "computer failure") corresponde a uma linha com o valor: "Onde está meu computador? A falha ao localizá-lo pode ser dispendiosa." Para obter mais informações sobre o comportamento do separador de palavras, consulte Configurar e gerenciar separadores de palavras e lematizadores de pesquisa.

  • <prefix_term>
    Especifica uma correspondência de palavras ou frases que começam com o texto especificado. Coloque o termo de prefixo entre aspas duplas ("") e adicione um asterisco (*) antes de fechar aspas, para que todo o texto que comece com o termo simples especificado antes do asterisco seja encontrado. A cláusula deve ser especificada deste modo: CONTAINS (column, '"text*"'). O asterisco corresponde a zero, um ou mais caracteres (da palavra de raiz ou termo na palavra ou frase). Se o texto e o asterisco não estiverem delimitados por aspas duplas e o predicado for CONTAINS (column, 'text*'), a pesquisa de texto completo considerará o asterisco como um caractere e pesquisará uma correspondência exata para text*. O mecanismo de texto completo não localizará palavras com o caractere de asterisco (*) porque os separadores de palavras, em geral, ignoram tais caracteres.

    Quando <prefix_term> for uma frase, cada palavra contida na frase será considerada um prefixo separado. Portanto, uma consulta especificando um termo de prefixo "vinho inter*" corresponde a qualquer linha com o texto "vinho interno", "vinho internacional" e assim por diante.

  • <generation_term>
    Especifica uma correspondência de palavras quando os termos simples incluídos tiverem variáveis da palavra original a ser pesquisada.

  • INFLEXIONAL
    Especifica que o lematizador dependente de idioma será usado no termo simples especificado. O comportamento do lematizador é definido com base em regras lexicais de cada idioma específico. O idioma neutro não tem um lematizador associado. O idioma das colunas que estão sendo consultadas é usado para fazer referência ao lematizador desejado. Se language_term for especificado, será usado o lematizador correspondente para aquele idioma.

    Um determinado <simple_term> dentro de um <generation_term> não corresponderá a substantivos e verbos.

  • THESAURUS
    Especifica que será usada a enciclopédia correspondente ao idioma de texto completo da coluna ou o idioma especificado na consulta. A correspondência do padrão ou dos padrões mais longos de <simple_term> é feita pela enciclopédia, e os termos adicionais são gerados para expandir ou substituir o padrão original. Se não for encontrada uma correspondência para o <simple_term> inteiro ou parte dele, a parte não correspondente será tratada como um simple_term. Para obter mais informações sobre o dicionário de sinônimos de pesquisa de texto completo, consulte Configurar e gerenciar arquivos de dicionário de sinônimos para Pesquisa de texto completo.

  • <generic_proximity_term>
    Especifica uma correspondência de palavras ou frases que devem estar no documento que está sendo pesquisado.

    Observação importanteImportante

    Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomendamos que você use <custom_proximity_term>.

    • NEAR | ~
      Indica que a palavra ou frase em cada lado do operador NEAR ou ~ deve ocorrer em um documento para uma correspondência a ser retornada. Você deve especificar dois termos de pesquisa. Um determinado termo de pesquisa pode ser uma única palavra ou uma frase delimitadas por aspas duplas ("phrase").

      Várias condições de proximidade podem ser encadeadas, como em a NEAR b NEAR c ou a ~ b ~ c. Os termos de proximidade encadeados devem estar todos no documento para que uma correspondência seja retornada.

      Por exemplo, CONTAINS(column_name, 'fox NEAR chicken') e CONTAINSTABLE(table_name, column_name, 'fox ~ chicken') retornam todos os documentos da coluna especificada que contêm "fox" e "chicken". Além disso, CONTAINSTABLE retorna uma classificação para cada documento baseado na proximidade de "raposa" e "galinha". Por exemplo, se um documento contiver a oração, "A raposa comeu a galinha", sua posição será alta porque as condições são mais próximas uma da outra do que em outros documentos.

      Para obter mais informações sobre condições de proximidade, consulte Procurar palavras perto de outra palavra com NEAR.

  • <custom_proximity_term>
    Especifica uma correspondência de palavras ou frases e, opcionalmente, a distância máxima permitida entre termos de pesquisa. você também pode especificar que os termos da pesquisa devem ser localizados na ordem exata em que você os especifica (<match_order>).

    Um determinado termo de pesquisa pode ser uma única palavra ou uma frase delimitadas por aspas duplas ("phrase"). Cada termo especificado deve estar no documento para que uma correspondência seja retornada. Você deve especificar pelo menos dois termos de pesquisa. O número máximo de termos de pesquisa são 64.

    Por padrão, a condição de proximidade personalizada retorna qualquer linha que contém os termos especificados independentemente da distância interveniente e independentemente da ordem deles. Por exemplo, para corresponder à consulta seguinte, um documento precisaria conter term1 e "term3 term4" em qualquer lugar, em qualquer ordem, simplesmente:

    CONTAINS(column_name, 'NEAR(term1,"term3 term4")')
    

    Os parâmetros opcionais são os seguintes:

    • <maximum_distance>
      Especifica a distância máxima permitida entre os termos de pesquisa no início e no término de uma cadeia de caracteres para que essa cadeia se qualifique como uma correspondência.

      • integer
        Especifica um inteiro positivo de 0 para 4294967295. Este valor controla quantos termos não relacionados a pesquisa podem ocorrer entre os primeiro e último termos de pesquisa, excluindo qualquer termo de pesquisa especificado adicional.

        Por exemplo, a consulta a seguir procura "AA" e "BB", em qualquer ordem, dentro de uma distância máxima de cinco.

        CONTAINS(column_name, 'NEAR((AA,BB),5)')
        

        A cadeia de caracteres "AA one two three four five BB" seria uma correspondência. No exemplo a seguir, a consulta especifica três termos de pesquisa, "AA", "BB" e "CC" em uma distância máxima de cinco:

        CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')
        

        Essa consulta corresponderia à cadeia de caracteres a seguir, na qual a distância total é cinco:

        BB one two CC three four five AA

        Note que o termo de pesquisa interno, "CC", não é contado.

      • MAX
        Retorna qualquer linha que contém as condições especificadas independentemente da distância entre eles. Este é o padrão.

    • <match_order>
      Especifica se as condições devem ocorrer na ordem especificada a ser retornada por uma consulta de pesquisa. Para especificar <match_order>,você deve especificar também <maximum_distance>.

      <match_order> leva um dos valores seguintes:

      • TRUE
        Impõe a ordem especificada nos termos. Por exemplo, NEAR(A,B) só corresponderia a A … B.

      • FALSE
        Ignora a ordem especificada. Por exemplo, NEAR(A,B) corresponderia a A … B e B … A.

        Este é o padrão.

      Por exemplo, a condição de proximidade a seguir pesquisa as palavras "Monday"", Tuesday" e "Wednesday" na ordem especificada independentemente da distância entre eles:

      CONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')
      

    Para obter mais informações sobre o uso de condições de proximidade personalizadas, consulte Procurar palavras perto de outra palavra com NEAR.

  • <weighted_term>
    Especifica que as linhas correspondentes (retornadas pela consulta) correspondem a uma lista de palavras e frases, sendo que cada uma, opcionalmente, recebe um valor de importância.

  • ISABOUT
    Especifica a palavra-chave <weighted_term>.

    • WEIGHT(weight_value)
      Especifica um valor de importância que é um número de 0,0 a 1,0. Cada componente no <weighted_term> pode incluir um weight_value. weight_value é uma maneira de alterar a forma como as várias partes de uma consulta afetam o valor de classificação atribuído a cada linha que corresponde à consulta. WEIGHT não afeta os resultados das consultas CONTAINS, mas impacta a classificação nas consultas CONTAINSTABLE.

      ObservaçãoObservação

      O separador decimal é sempre um ponto, independentemente da localidade do sistema operacional.

  • { AND | & } | { AND NOT | &! } | { OR | | }
    Especifica uma operação lógica entre dois critérios de pesquisa CONTAINS.

    • { AND | & }
      Indica que os dois critérios de pesquisa CONTAINS devem ser atendidos para haver uma correspondência. O símbolo E comercial (&) pode ser usado em vez da palavra-chave AND para representar o operador AND.

    • { AND NOT | &! }
      Indica que o segundo critério de pesquisa não deve estar presente para haver uma correspondência. O símbolo E comercial seguido pelo símbolo de ponto de exclamação (&!) pode ser usado em vez da palavra-chave AND NOT para representar o operador AND NOT.

    • { OR | | }
      Indica que qualquer um dos dois critérios de pesquisa CONTAINS deve ser atendido para haver uma correspondência. O símbolo de barra vertical (|) pode ser usado em vez da palavra-chave OR para representar o operador OR.

      Quando <contains_search_condition> contém grupos entre parênteses, esses grupos são avaliados primeiro. Depois de avaliar grupos entre parênteses, essas regras se aplicam ao usar estes operadores lógicos com os critérios de pesquisa CONTAINS:

      • NOT é aplicado antes de AND.

      • NOT só pode ocorrer depois de AND, como em AND NOT. O operador OR NOT não é permitido. NOT não pode ser especificado antes do primeiro termo. Por exemplo, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) não é válido.

      • AND é aplicado antes de OR.

      • Operadores boolianos do mesmo tipo (AND, OR) são associativos e, portanto, podem ser aplicados em qualquer ordem.

      • n
        É um espaço reservado que indica que várias condições e termos de pesquisa CONTAINS podem ser especificados dentro dele.

Comentários gerais

Predicados e funções de texto completo funcionam em uma única tabela implícita no predicado FROM. Para pesquisar em várias tabelas, use uma tabela unida na cláusula FROM para pesquisar em um conjunto de resultados que é o produto de duas ou mais tabelas.

Predicados de texto completo não são permitidos na cláusula OUTPUT quando o nível de compatibilidade do banco de dados está definido como 100.

Consultando servidores remotos

É possível usar um nome de quatro partes no predicado CONTAINS ou FREETEXT para consultar colunas indexadas de texto completo das tabelas de destino em um servidor vinculado. Para preparar um servidor remoto para receber consultas de texto completo, crie um índice de texto completo nas tabelas e colunas de destino no servidor remoto e, em seguida, adicione o servidor remoto como um servidor vinculado.

Comparação de LIKE com a pesquisa de texto completo

Em comparação com a pesquisa de texto completo, o predicado Transact-SQL LIKE funciona apenas com padrões de caractere. Além disso, não é possível usar o predicado LIKE para consultar dados binários formatados. Além disso, uma consulta LIKE feita em uma grande quantidade de dados de texto não estruturados é bem mais lenta do que uma consulta de texto completo equivalente feita nos mesmos dados. Uma consulta LIKE executada em milhões de linhas de dados pode levar muitos minutos para retornar, enquanto uma consulta de texto completo pode demorar apenas alguns segundos ou menos para ser executada nos mesmos dados, dependendo do número de linhas retornadas e seu tamanho. Outra consideração é que LIKE executa apenas um exame de padrão simples de uma tabela inteira. Uma consulta de texto completo, em contrapartida, reconhece idiomas, aplicando transformações específicas a índice e hora de consulta, como filtrar palavras irrelevantes e fazer expansões flexivas e de dicionário de sinônimos. Essas transformações ajudam consultas de texto completo a melhorar a recuperação delas e a sua posição final dos resultados.

Consultando várias colunas (Pesquisa de Texto Completo)

Você pode consultar várias colunas especificando uma lista de colunas para pesquisar. As colunas devem ser da mesma tabela.

Por exemplo, a consulta CONTAINS a seguir pesquisa o termo "Red" nas colunas Name e Color da tabela Production.Product do banco de dados de exemplo AdventureWorks2012.

Use AdventureWorks2012;
GO
SELECT Name, Color FROM Production.Product
WHERE CONTAINS((Name, Color), 'Red');

Exemplos

A.Usando CONTAINS com <simple_term>

O exemplo a seguir localiza todos os produtos com um preço de $80.99 contendo a palavra "Mountain".

USE AdventureWorks2012;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
   AND CONTAINS(Name, 'Mountain');
GO

B.Usando CONTAINS e a frase com <simple_term>

O exemplo a seguir retorna todos os produtos contendo a expressão "Mountain" ou "Road".

USE AdventureWorks2012;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' Mountain OR Road ')
GO

C.Usando CONTAINS com <prefix_term>

O exemplo a seguir retorna todos os nomes de produtos com pelo menos uma palavra que comece com a cadeia de prefixos na coluna Name.

USE AdventureWorks2012;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO

D.Usando CONTAINS e OR com <prefix_term>

O exemplo a seguir retorna todas as descrições de categoria contendo cadeias de caracteres com prefixos de "chain" ou "full".

USE AdventureWorks2012;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
GO

E.Usando CONTAINS com <proximity_term>

O exemplo a seguir pesquisa a tabela Production.ProductReview para todos os comentários que contêm a palavra "bike" em 10 termos da palavra "control" e na ordem especificada (ou seja, onde "bike" precede "control").

USE AdventureWorks2012;
GO
SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');
GO

F.Usando CONTAINS com <generation_term>

O exemplo a seguir pesquisa todos os produtos com as palavras da forma ride: "riding", "ridden" e assim por diante.

USE AdventureWorks2012;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
GO

G.Usando CONTAINS com <weighted_term>

O exemplo a seguir pesquisa todos os nomes de produtos contendo as palavras performance, comfortable ou smooth, e diferentes pesos são dados a cada uma.

USE AdventureWorks2012;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8), 
comfortable weight (.4), smooth weight (.2) )' );
GO

H.Usando CONTAINS com variáveis

O exemplo a seguir usa uma variável em vez de um termo de pesquisa específico.

USE AdventureWorks2012;
GO
DECLARE @SearchWord nvarchar(30)
SET @SearchWord = N'Performance'
SELECT Description 
FROM Production.ProductDescription 
WHERE CONTAINS(Description, @SearchWord);
GO

I.Usando CONTAINS com um operador lógico (AND)

O exemplo a seguir usa a tabela ProductDescription do banco de dados AdventureWorks2012 . A consulta usa o predicado CONTAINS para procurar descrições nas quais o ID de descrição não é igual a 5 e a descrição contém as palavras Aluminum e spindle. O critério de pesquisa usa o operador booliano AND.

USE AdventureWorks2012;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
   CONTAINS(Description, 'Aluminum AND spindle');
GO

J.Usando CONTAINS para verificar uma inserção de linha

O exemplo a seguir usa CONTAINS dentro de uma subconsulta SELECT. Usando o banco de dados AdventureWorks2012 , a consulta obtém o valor de todos os comentários na tabela ProductReview de um ciclo específico. O critério de pesquisa usa o operador booliano AND.

USE AdventureWorks2012;
GO
INSERT INTO Production.ProductReview 
(ProductID, ReviewerName, EmailAddress, Rating, Comments) 
VALUES
(780, 'John Smith', 'john@fourthcoffee.com', 5, 
'The Mountain-200 Silver from AdventureWorks2008 Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond');
 
-- Given the full-text catalog for these tables is Adv_ft_ctlg, 
-- with change_tracking on so that the full-text indexes are updated automatically.
WAITFOR DELAY '00:00:30';   
-- Wait 30 seconds to make sure that the full-text index gets updated.
 
SELECT r.Comments, p.Name
FROM Production.ProductReview r
JOIN Production.Product p 
ON
 r.ProductID = p.ProductID
 
AND r.ProductID = (SELECT ProductID
                  FROM Production.ProductReview
                  WHERE CONTAINS (Comments, 
                                 ' AdventureWorks2008 AND 
                                   Redmond AND 
                                   "Mountain-200 Silver" '));

GO

K.Consultando em uma propriedade de documento

A consulta a seguir realiza pesquisa em uma propriedade indexada, Title, na coluna Document da tabela Production.Document. A consulta retorna apenas documentos cuja propriedade Title contém a cadeia de caracteres Maintenance ou Repair.

ObservaçãoObservação

Para que uma pesquisa de propriedade retorne linhas, o filtro ou filtros que analisam a coluna durante a indexação devem extrair a propriedade especificada. Além disso, o índice de texto completo da tabela especificada deve ter sido configurado para incluir a propriedade. Para obter mais informações, consulte Pesquisar propriedades de documento com listas de propriedades de pesquisa.

Use AdventureWorks2012;
GO
SELECT Document FROM Production.Document
  WHERE CONTAINS(PROPERTY(Document,'Title'), 'Maintenance OR Repair');
GO

Consulte também

Tarefas

Criar consultas de pesquisa de texto completo (Visual Database Tools)

Referência

CREATE FULLTEXT CATALOG (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

FREETEXTTABLE (Transact-SQL)

WHERE (Transact-SQL)

Conceitos

Iniciar a pesquisa de texto completo

Criar e gerenciar catálogos de texto completo

Criar e gerenciar índices de texto completo

Consulta com pesquisa de texto completo

Consulta com pesquisa de texto completo

Pesquisa de texto completo (SQL Server)

Pesquisar propriedades de documento com listas de propriedades de pesquisa