Recibo el siguiente error en mi base de datos SQL Server 2008 R2:
No se puede usar un predicado
CONTAINS
oFREETEXT
en la tabla o vista indexada 'tblArmy' porque no tiene un índice de texto completo.
Recibo el siguiente error en mi base de datos SQL Server 2008 R2:
No se puede usar un predicado
CONTAINS
oFREETEXT
en la tabla o vista indexada 'tblArmy' porque no tiene un índice de texto completo.
Respuestas:
Asegúrese de tener instalada la función de búsqueda de texto completo.
Cree un catálogo de búsqueda de texto completo.
use AdventureWorks
create fulltext catalog FullTextCatalog as default
select *
from sys.fulltext_catalogs
Cree un índice de búsqueda de texto completo.
create fulltext index on Production.ProductDescription(Description)
key index PK_ProductDescription_ProductDescriptionID
Antes de crear el índice, asegúrese de que:
- no tenga un índice de búsqueda de texto completo en la tabla, ya que solo se permite un índice de búsqueda de texto completo en una tabla
- existe un índice único en la tabla. El índice debe basarse en una columna de clave única, que no permite NULL.
- Existe un catálogo de texto completo. Debe especificar el nombre del catálogo de texto completo de forma explícita si no hay un catálogo de texto completo predeterminado.
Puede realizar los pasos 2 y 3 en SQL Sever Management Studio. En el explorador de objetos, haga clic derecho en una tabla, seleccione el Full-Text index
elemento del menú y luego el Define Full-Text Index...
elemento del submenú. El asistente de indexación de texto completo lo guiará a través del proceso. También creará un catálogo de búsqueda de texto completo para usted si aún no tiene ninguno.
Puede encontrar más información en MSDN
Una solución alternativa para CONTAINS
: Si no desea crear un índice de texto completo en la columna y el rendimiento no es una de sus prioridades, puede usar la LIKE
declaración que no necesita ninguna configuración previa:
Ejemplo: busque todos los Productos que contengan la letra Q:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Debe definir Full-Text-Index
en todas las tablas de la base de datos dónde necesita usar una consulta con la CONTAINS
que tomará algún tiempo.
En su lugar, puede usar el LIKE
que le dará resultados instantáneos sin la necesidad de ajustar ninguna configuración para las tablas.
Ejemplo:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
El mismo resultado obtenido con CONTAINS
se puede obtener con LIKE
.
Es posible que deba habilitar la tabla para la indexación de texto completo .
debe agregar un índice de texto completo en los campos específicos que desea buscar.
ALTER TABLE news ADD FULLTEXT(headline, story);
donde "noticias" es su tabla y los campos "título, historia" que no habilitará para la búsqueda de texto completo
Hay una solución más para establecer el texto completo de la columna en verdadero.
Esta solución, por ejemplo, no funcionó para mí.
ALTER TABLE news ADD FULLTEXT(headline, story);
Mi solución.
PRÓXIMOS PASOS
Actualizar
Versión de mssql 2014
Select * from table
where CONTAINS([Column], '"A00*"')
actuará como% igual que
where [Column] Like 'A00%'