Respuesta

4

Consulte this y this. Son excelentes publicaciones sobre cómo hacerlo.

5

La respuesta es no, no en el caso general, aunque puede depender de lo que quiere decir eficiente. Para estos fines, utilizaré la siguiente definición: 'Hace un uso efectivo de los índices y las uniones en un orden razonable' que probablemente sea tan bueno como cualquier otro.

En este caso, las consultas 'Eficientes' son 's-arg'-able, lo que significa que pueden usar búsquedas de índice para restringir los predicados de búsqueda. Las desigualdades (t-join) y las desigualdades simples pueden hacer esto. Los predicados "AND" también pueden hacer esto. Después de eso, accedemos al análisis de tabla, índice y rango, es decir, operaciones que tienen que hacer comparaciones registro por registro (o índice por teclado por índice).

La respuesta de Sontek describe un método para alinear la funcionalidad de expresiones regulares en una consulta, pero las operaciones aún tienen que hacer comparaciones registro por registro. Envolverlo en una función permitiría un índice basado en funciones donde el resultado de un cálculo se materializa en el índice (Oracle lo admite y puede obtener una funcionalidad equivalente en SQL Server utilizando el tipo de trucos discutidos en in this article). Sin embargo, no podrías hacer esto para una expresión regular arbitraria.

En el caso general, la semántica de una expresión regular no se presta para eliminar conjuntos de coincidencias del modo que lo hace un índice, por lo que probablemente no sea posible integrar el soporte de rexegp en el optimizador de consultas.

0

creo que podemos ver en los nuevos tipos de SQL Server 2008 (hierarchyid, geo-espacial) que si Microsoft no se añade esto vendrá en la forma de un conjunto de SQL CLR

Si usted es capaz de instale Assemblies en su base de datos, puede crear el suyo creando un nuevo proyecto de Database \ SQL Server en Visual Studio, esto le permitirá crear un nuevo Trigger/UDF/Stored Proc/Aggregate o UDT. Puede importar System.Text.RegularExpressions en la clase e ir desde allí.

Esperanza esto ayuda

1

Me encantaría tener la posibilidad de llamar de forma nativa expresiones regulares en SQL Server para consultas ad hoc y su uso en procedimientos almacenados. Nuestros administradores de bases de datos no nos permitirán crear funciones CLR, así que he estado usando LINQ Pad como una especie de editor de consultas de personas pobres para las cosas ad hoc. Es especialmente útil cuando se trabaja con datos estructurados como JSON o XML que se han guardado en la base de datos.

Y acepto que parece un descuido que no hay soporte de expresiones regulares, parece ser una característica obvia para un lenguaje de consulta. Esperemos que lo veamos en una versión futura, pero la gente lo ha estado pidiendo durante mucho tiempo y todavía no ha llegado al producto.

La razón más frecuente que he visto en contra es que una expresión mal formada puede causar catastrophic backtracking que en .NET no abortará y casi siempre requiere que la máquina se reinicie. Quizás una vez que aborden eso en el marco lo veremos incluido en una versión futura de SQL Server.

+2

Esto es especulación y comentario, no una respuesta. – amoss

Cuestiones relacionadas