Social Icons

lunes, 20 de octubre de 2008

Busquedas en Sharepoint con SQL (III)

Y espero parar ya, qué pesado con el tema...

Hago éste post porque he estado hoy probando las búsquedas con comodines o wildcards y me he llevado algunas sorpresas. La primera es que no se pueden hacer búsquedas comodines en propiedades administradas que no devuelven datos... Se ve que se me escapa algo porque en estas propiedades se puede buscar con CONTAINS y con LIKE (sin wildcards) pero pese a poderse buscar en ellas luego no muestran nada si se cogen en el SELECT.

Me explico:


En ésta propiedad administrada (managed property) hemos introducido dos propiedades rastreadas (crawled properties) y le hemos dicho que incluya los valores de TODAS las propiedades. De este modo podemos hacer que las búsquedas por defecto sean más complejas [como en el ejemplo en el que podríamos hacer WHERE CONTAINS(ErChan,'VRG535 OR Chan')] pero luego si usamos comodines en ellas no funcionará.

En propiedades administradas que solo tengan una propiedad rastreada es donde tiene, por otro lado verdadero sentido hacer consultas del tipo WHERE Contains(NomFactura,'%RG%') aquí nos devolvería los items que tuvieran RG precedido de cualquier número de caracteres y seguido de otro cualquier número de caracteres.

Los comodines que he usado con algún tipo de éxito en SharePoint son:


  • % que sustituye a cualquier número de caracteres.

  • _ que sustituye a un solo caracter.


Uff cúantos.
Gracias al uso de éstos comodines podremos hacer también por ejemplo búsquedas como WHERE CONTAINS(NomFactura,'_RG%')

Se me olvidó decir el otro día que también podemos usar cosas como WHERE CONTAINS(NomFactura,'Hola') AND NOT CONTAINS (Estado,'PAGADO').

Y con ésto he profundizado en el tema bastante más de lo que yo mismo creía que llegaría a profundizar. De todas formas, si llego a enterarme de algo interesante postearé más todavía.

Saludos a Portugal.

2 comentarios:

tirafrutas dijo...

Y recuerda la grandísima restricción: La cláusula WHERE no puede empezar con la condición NOT CONTAINS.

Chis pom.

Er Chan dijo...

Prueba definiendo un scope. A mi me funciona esto: select title from scope() where "scope"='Jur***' AND NOT Contains(TipoR***,'AAA'). También es verdad que lo he probado con el ámbito Todos los sitios y me ha fallado :)

Saludos.