una texto por palabras palabra igualar ejemplos cadena busqueda buscar sql-server full-text-search

sql server - por - 7645 Predicado de texto completo nulo o vacío



is en sql (4)

Tengo una consulta que funcionó bien en SQL2005 pero mover la base de datos a SQL2008 me da el error del título.

El código que es el problema es una llamada a CONTAINS, CONTAINSTABLE o FREETEXT con un parámetro vacío. Sin embargo, solo intento llamar o unirme cuando hay un valor como ese

where (@search_term = '''' or (FREETEXT(lst.search_text, @search_term)))

o

left join containstable (listing_search_text, search_text, @search_term) ftb on l.listing_id = ftb.[key] and len(@search_term) > 0

Sin embargo, no puedo encontrar ninguna solución para que esto funcione en SQL2008. ¿Algunas ideas?

Sé que puedo hacer SQL dinámico o tener una instrucción if con dos casos diferentes (seleccionar con FT join, seleccionar sin FT join. ¿Alguna mejor solución que no requiera hacer esto?


Esta solución no funcionó para mí en SQL 2008. La respuesta parecía bastante clara y se consideró útil, pero me daban tiempos de espera en una mesa con registros de 2M. De hecho, bloqueó un servidor que ejecutaba la consulta en SSMS.

No parecía gustarle el quirófano en la cláusula where, pero podía ejecutar bien la consulta separando las condiciones.

Terminé usando un UNION con éxito como solución alternativa.

declare @SearchTerm nvarchar(250) SET @SearchTerm = ''""'' select UserId, U.Description, U.UserName from dbo.Users U WHERE ((@SearchTerm = ''""'') UNION select UserId, U.Description, U.UserName from dbo.Users U WHERE CONTAINS( (U.Description, U.UserName), @SearchTerm))


El problema con FTS y el operando OR se corrigió en SP2 CU4. La condición O debería ejecutarse bien sin tener que UNIÓN si está en ese nivel o más tarde. Probamos una actualización muy reciente de SP2 CU8 y FTS funciona con OR ahora. Además, las búsquedas como 3.12 que fallarían antes ahora funcionan bien.


Hoy encontré la respuesta a esto al convertir mi propia base de datos de SQL 2005 a SQL 2008.

Pase "" para su término de búsqueda y cambie la @search_term = '''' prueba para que sea @search_term = ''""'' servidor SQL ignorará las comillas dobles y no arrojará un error.

Por ejemplo, lo siguiente realmente devolverá todos los registros en la tabla Usuarios:

declare @SearchTerm nvarchar(250) SET @SearchTerm = ''""'' select UserId, U.Description, U.UserName from dbo.Users U WHERE ((@SearchTerm = ''""'') OR CONTAINS( (U.Description, U.UserName), @SearchTerm))

Si usa .Net, puede obtener una copia de la clase FullTextSearch de EW Bachtal. Su sitio es muy informativo: http://ewbi.blogs.com/develops/


Simplemente AGREGUE comillas dobles. Puede verificar la cadena vacía y luego agregar comillas dobles en ella.

Set @search_term = case when @search_term = '''' then ''""'' else @Address End

Aqui tienes -

where (@search_term = ''""'' or (FREETEXT(lst.search_text, @search_term)))