Remplacer certains motifs dans une longue string dans MS SQL à l'aide de T-SQL

J'ai une table dans ma database MS SQL où il y a des données incomplètes dans un champ. Ce champ en question est un champ varchar et a environ 1000 caractères dans le domaine. Cette string se compose de segments de mots au format d'une barre oblique suivie du segment et se termine par une barre oblique (c'est-à-dire / p /). Chacun de ces segments serait séparé par un espace. Le problème est que certaines de ces segmentations n'ont pas la dernière barre oblique (ie / p). J'ai besoin d'écrire un script T-SQL qui corrigerait ce problème.

Je sais que je devrai utiliser une instruction de mise à jour pour le faire. J'ai aussi la clause where. Mais le problème que j'ai est de savoir à quoi je le mets égal. Comme la string contient environ 1000 caractères, je ne veux pas taper la string actuelle et corriger la segmentation problématique. Ma question est la suivante: existe-t-il une «fonction de rlocation RegEx» qui ne changerait que les segmentations problématiques et laisserait le rest de la string seule?

Votre aide sera grandement appréciée.

Merci d'avance, Monte

SQL ne supporte pas RegEx dedans. Vous pouvez écrire une fonction SQL CLR puis y apather datatables et s'il y a un problème avec datatables, returnnez la version corrigée à SQL.

UPDATE YourTable Set YourColumn = dbo.YourClrProc(YourColumn) 

Si Windows Scripting Host est installé (la plupart des machines le font), vous pouvez utiliser cette méthode pour appeler l'object VBScript.RegExp à partir de T-SQL.

Il y a REPLACE , mais rien de proche de RegEx.

S'il s'agit d'une opération ponctuelle, vous pouvez envisager d'exporter la table, utiliser un outil familier comme sed ou grep, puis réimporter datatables modifiées. Ce sera probablement plus rapide et plus correct que d'essayer de le faire en T-SQL.

D'un autre côté, si une opération de maintenance planifiée est nécessaire, vous devrez répéter souvent comme un moyen de maintenir datatables, alors je suis d'accord avec mrdenny, une fonction CLR est probablement le meilleur choix.