2010-04-14 8 views
34

J'ai une base de données dans SQL Server 2005 qui a été créée à partir de SQL Server 2000 et utilise toujours les champs de type TEXT au lieu de varchar (max).Recherche et remplacement de SQL Server dans le champ TEXTE

J'ai besoin de trouver et de remplacer une chaîne de caractères dans le champ de texte, mais tous les exemples de comment faire cela que j'ai trouvé ne semblent pas fonctionner pour moi. Il semble que la commande UPDATETEXT nécessite que les deux paramètres "insert_offset" et "delete_length" soient définis explicitement mais que la chaîne que je recherche puisse apparaître dans le texte à tout moment ou même à plusieurs endroits de la même cellule. Ma compréhension de ces deux paramètres est que la chaîne de recherche sera toujours au même endroit, de sorte que insert_offset est le nombre d'espaces dans le texte que la commande UPDATETEXT commencera à remplacer le texte.

Exemple: Nécessité de trouver: &lt;u&gt; et le remplacer par: <u>

texte par exemple sur le terrain:

Quelqu'un peut-il me aider avec ça? MERCI!

Répondre

60

J'ai finalement compris. Il a été enterré dans les commentaires à l'article jfrobishow publié. Merci beaucoup.

Voici la réponse qui m'a conduit tout à la solution:

Citation: Posté par fredclown

Si vous utilisez SQL 2005 vous pouvez utiliser le remplacer par un type de texte. Tout ce que vous avez à faire est le ci-dessous ...

champ = remplacer (fonte (champ varchar (max)), 'string', 'remplacement')

Facile comme bonjour.

Deux pouces à Fredclown !!! commande fonctionne comme un charme pour moi aussi. Ce est ce que je l'ai écrit ma déclaration de mise à jour à Rechercher et remplacer dans un champ de texte dans SQL Server 2005 base de données

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX)) 
               ,'SearchText', 'ReplaceText') 
FROM TableName 
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0 

Note: que cela peut tronquer la taille de votre dbfield, mais Si c'est une longue colonne de texte, faites nvarchar (max) et vous ne devriez pas obtenir de troncation!

+8

avertissement: cela va recadrer le contenu du champ de texte à 8000 caractères –

+0

@incubushead merci. Je sais que c'est un ancien article, mais cette syntaxe spécifique que vous avez proposée m'a directement aidé à vivre sur un site client avec quelque chose qui allait être long et difficile, merci. Toute personne bloquée avec un champ ntext - J'étais, Ne pas lancer en ntext (ne fonctionne pas ET est obsolète), utilisez simplement varchar (max) comme indiqué ici; ça fonctionne juste. La distribution ne modifie pas le type de colonne, la façon dont la mise à jour se comporte. N'utilisez pas non plus MAX si le texte est un peu plus long que quelques caractères sinon votre troncature à 50 caractères. –

+0

Que faire si vous voulez supprimer des chaînes et ne pas les remplacer du tout avec quoi que ce soit? – Fandango68

Questions connexes