Estou recebendo o seguinte erro em meu banco de dados SQL server 2008 R2:
Não é possível usar um predicado
CONTAINS
ouFREETEXT
na tabela ou exibição indexada 'tblArmy' porque não é indexado em texto completo.
Estou recebendo o seguinte erro em meu banco de dados SQL server 2008 R2:
Não é possível usar um predicado
CONTAINS
ouFREETEXT
na tabela ou exibição indexada 'tblArmy' porque não é indexado em texto completo.
Respostas:
Certifique-se de ter o recurso de pesquisa de texto completo instalado.
Crie um catálogo de pesquisa de texto completo.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Crie um índice de pesquisa de texto completo.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Antes de criar o índice, certifique-se:
- você ainda não tem um índice de pesquisa de texto completo na tabela, pois apenas um índice de pesquisa de texto completo é permitido em uma tabela
- existe um índice exclusivo na tabela. O índice deve ser baseado em coluna de chave única, que não permite NULL.
- existe um catálogo de texto completo. Você deve especificar o nome do catálogo de texto completo explicitamente se não houver um catálogo de texto completo padrão.
Você pode executar as etapas 2 e 3 no SQL Server Management Studio. No explorador de objetos, clique com o botão direito do mouse em uma tabela, selecione o Full-Text index
item de menu e o item de Define Full-Text Index...
submenu. O assistente de indexação de texto completo irá guiá-lo através do processo. Ele também criará um catálogo de pesquisa de texto completo para você, caso ainda não tenha.
Você pode encontrar mais informações no MSDN
Uma solução alternativa para CONTAINS
: se você não deseja criar um índice de texto completo na coluna e o desempenho não é uma de suas prioridades, você pode usar a LIKE
instrução que não precisa de nenhuma configuração anterior:
Exemplo: encontre todos os Produtos que contenham a letra Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Você deve definir Full-Text-Index
em todas as tabelas do banco de dados onde deseja usar uma consulta CONTAINS
que levará algum tempo.
Em vez disso, você pode usar o LIKE
que fornecerá resultados instantâneos sem a necessidade de ajustar as configurações das tabelas.
Exemplo:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
O mesmo resultado obtido com CONTAINS
pode ser obtido com LIKE
.
Pode ser necessário habilitar a tabela para indexação de texto completo .
você tem que adicionar índice de texto completo em campos específicos que deseja pesquisar.
ALTER TABLE news ADD FULLTEXT(headline, story);
onde "notícias" é sua tabela e os campos "título, história" que você não habilitará para a pesquisa de texto completo
Existe mais uma solução para definir a coluna Full text como true.
Essa solução, por exemplo, não funcionou para mim
ALTER TABLE news ADD FULLTEXT(headline, story);
Minha solução.
PRÓXIMOS PASSOS
Atualizar
Versão do mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
atuará como% igual a
where [Column] Like 'A00%'