Les Expressions régulières dans les serveurs SQL Server?
Est-il possible de faire des requêtes performantes que d'utiliser les expressions rationnelles complet de fonctionnalités.
Si pas de Microsoft ne devrait vraiment envisager la fonctionnalité.
Vous devez vous connecter pour publier un commentaire.
Pour SQL Server 2000 (et toute autre édition 32 bits de SQL Server), il est xp_pcre, qui introduit Perl compatible regular expressions comme un ensemble de procédures stockées étendues. Je l'ai utilisé, il fonctionne.
Les versions les plus récentes de vous donner un accès direct à la .NET intégrée des expressions régulières (ce lien semble être mort, en voici une autre: MSDN: Comment faire: Travailler avec des Objets de Base de données CLR).
La réponse est non, pas dans le cas général, bien qu'il puisse dépend de ce que vous entendez par efficace. À ces fins, je vais utiliser la définition suivante: "Fait une utilisation efficace des index et des jointures dans un ordre logique' qui est probablement aussi bon que n'importe quel.
Dans ce cas, "Efficace" requêtes sont de 's-arg'-mesure, ce qui signifie qu'ils peuvent utiliser l'indice de recherches pour affiner la recherche des prédicats. Égalités (t-joint) et de simples inégalités peuvent le faire. "ET" les prédicats peuvent aussi le faire. Après cela, nous passons à table, de l'index et de la plage de balayage à - dire les opérations qui doivent faire l'enregistrement par enregistrement (ou index-keyby indice-clé) comparaisons.
Sontek réponse décrit une méthode de l'in-lining regexp fonctionnalité dans une requête, mais les opérations ont encore de faire des comparaisons sur un enregistrement par enregistrement de base. L'emballant dans une fonction permettrait une fonction d'index de base où le résultat d'un calcul est matérialisée dans l'index (Oracle prend en charge ce et vous pouvez obtenir des fonctionnalités équivalentes dans SQL Server en utilisant le genre de trucs discuté dans cet article). Cependant, vous ne pouviez pas faire cela pour un arbitraire regexp.
Dans le cas général, la sémantique d'une expression régulière ne se prêtent pas à l'élagage match de jeux dans le genre de titre que l'indice n', de sorte que l'intégration de rexegp de la prise en charge de l'optimiseur de requête est sans doute pas possible.
Découvrez cette et cette. Ils sont grands postes sur la façon de le faire.
J'aimerais avoir la possibilité de faire appel en mode natif des expressions régulières dans SQL Server pour des requêtes ad hoc et l'utilisation des procédures stockées. Notre DBA ne nous permettra pas de créer des fonctions CLR donc j'ai été en utilisant LINQ Pad comme une sorte de pauvre homme de l'éditeur de requête ad hoc choses. Il est particulièrement utile lorsque vous travaillez avec des données structurées comme JSON ou XML qui a été enregistré dans la base de données.
Et je suis d'accord qu'il semble comme un oubli qu'il n'y a pas de support des expressions régulières, il semble comme une fonctionnalité évidente pour un langage de requête. J'espère que nous allons le voir dans une future version, mais les gens ont demandé depuis longtemps et il n'a pas fait son chemin dans le produit encore.
La raison la plus fréquente que j'ai vu contre il est un peu formée expression peut causer catastrophique mandature qui en .NET ne va pas abandonner et nécessite presque toujours le redémarrage de la machine. Peut-être une fois qu'ils l'adresse que dans le cadre que nous allons voir dans une future version de SQL Server.
Je pense que l'on peut voir de nouveaux types dans SQL Server 2008 (hierarchyid, géo-spatiale) que si Microsoft ne ajouter ce il prendra la forme d'un SQL CLR Assemblée
Si vous êtes en mesure d'installer des Assemblys dans votre base de données, vous pourriez rouler votre propre par la création d'une nouvelle Base de données\SQL Server projet dans Visual Studio, ce qui vous permettra de faire un nouveau Déclencheur /UDF /Proc Stockée, de les regrouper ou de l'UDT. Vous pouvez importer Système.Texte.RegularExpressions dans la classe et à partir de là.
Espère que cette aide