Compartilhar via


CONTAINS (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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

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").

Para obter informações sobre os formatos de pesquisas de texto completo compatíveis com o SQL Server, consulte Consulta com a pesquisa de texto completo.

Convenções de sintaxe de 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 precisa ser colocada entre parênteses. A menos que language_term seja especificado, o idioma de todas as colunas da column_list precisará ser o mesmo.

*
Especifica que a consulta pesquisa todas as colunas indexadas de texto completo na tabela especificada na cláusula FROM para o critério de pesquisa especificado. 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 precisará ser o mesmo.

PROPERTY ( column_name , 'property_name')
Aplica-se a: SQL Server 2012 (11.x) e posterior.

Especifica uma propriedade de documento na qual procurar o critério de pesquisa especificado.

Importante

Para que a consulta retorne linhas, property_name deve ser especificado na lista de propriedades de pesquisa do índice de texto completo e o índice de texto completo deve conter entradas específicas à propriedade para property_name. Para obter mais informações, veja 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ção, expansões e substituições do dicionário 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 uma coluna desse tipo, especificar LANGUAGE language_term pode aumentar a probabilidade de uma boa correspondência.

language_term pode ser especificado como uma cadeia de caracteres, um inteiro ou um valor hexadecimal que corresponde ao LCID 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 no modo de exibição de compatibilidade sys.syslanguages (Transact-SQL). A cadeia de caracteres precisa ser colocada entre aspas, como em 'language_term'. Quando especificado como um inteiro, language_term é a LCID real que identifica o idioma. Quando especificado como um valor hexadecimal, language_term é 0x seguido pelo valor hexadecimal da LCID. O valor hexadecimal não deve exceder oito dígitos, inclusive 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 neutro, especifique 0x0 como language_term.

<contains_search_condition>
Especifica o texto a ser pesquisado em column_name e os critérios para uma correspondência.

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

USE AdventureWorks2022;  
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 na conversão, use nvarchar para melhorar o desempenho. No exemplo, declare @SearchWord como nvarchar(30).

USE AdventureWorks2022;  
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çã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? Não encontrá-lo pode sair caro. Para obter mais informações sobre o comportamento de separadores de palavras, confira Configurar e gerenciar separadores de palavras e lematizadores para 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> é uma expressão, cada palavra contida na expressão é 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 é especificado, o lematizador correspondente a esse idioma é usado.

Um <simple_term> especificado 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 em relação ao dicionário de sinônimos, 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 da pesquisa de texto completo, consulte Configurar e gerenciar arquivos de dicionário de sinônimos para a pesquisa de texto completo.

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

Importante

Esse recurso será removido em uma versão futura do 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 termo de pesquisa fornecido pode ser uma única palavra ou uma frase delimitada 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 termos de proximidade genéricos, consulte Pesquisar palavras próximas de outra palavra com NEAR.

<custom_proximity_term>
Aplica-se a: SQL Server 2012 (11.x) e posterior.

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 termo de pesquisa fornecido pode ser uma única palavra ou uma frase delimitada 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.

inteiro
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 pesquisa 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 será uma correspondência. No seguinte exemplo, a consulta especifica três termos de pesquisa, AA, BB e CC, dentro de 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 A A

Observe 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. Esse é 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>, é necessário especificar também <maximum_distance>.

<match_order> usa 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.

Esse é 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 como usar termos de proximidade personalizados, consulte Pesquisar palavras próximas 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 em <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 afeta a classificação nas consultas CONTAINSTABLE.

Observaçã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

As funções e os predicados de texto completo trabalham em uma única tabela, que está 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 é 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.

Ao contrário da pesquisa de texto completo, o predicado LIKETransact-SQL funciona apenas em padrões de caracteres. 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.

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 AdventureWorks2022.

Use AdventureWorks2022;  
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 AdventureWorks2022;  
GO  
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, 'Mountain');  
GO  

B. Usando CONTAINS e expressão com <simple_term>

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

USE AdventureWorks2022;  
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 AdventureWorks2022;  
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 AdventureWorks2022;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, '"chain*" OR "full*"');  
GO  

E. Usando CONTAINS com <proximity_term>

Aplica-se a: SQL Server 2012 (11.x) e posterior.

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

USE AdventureWorks2022;  
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 AdventureWorks2022;  
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 que contêm as palavras performance, comfortable ou smooth, e diferentes pesos são dados a cada palavra.

USE AdventureWorks2022;  
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 AdventureWorks2022;  
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 AdventureWorks2022 . A consulta usa o predicado CONTAINS para pesquisar descrições nas quais a 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 AdventureWorks2022;  
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 AdventureWorks2022, 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 AdventureWorks2022;  
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 AS r  
JOIN Production.Product AS 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

Aplica-se a: SQL Server 2012 (11.x) e posterior.

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çã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, veja Pesquisar propriedades de documento com listas de propriedades de pesquisa.

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

Consulte Também

Iniciar a pesquisa de texto completo
Criar e gerenciar catálogos de texto completo
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Criar e gerenciar índices de texto completo
Consulta com pesquisa de texto completo
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Consulta com pesquisa de texto completo
Pesquisa de texto completo
Criar consultas de pesquisa de texto completo (Visual Database Tools)
WHERE (Transact-SQL)
Pesquisar propriedades de documento com listas de propriedades de pesquisa