110 votes

solutions de rechange à REMPLACER sur un texte ou d'un type de données ntext

J'ai besoin de mettre à jour ou remplacer les données dans la datatable.la colonne. La table a un champ nommé Content. Je suis à l'aide de l' REPLACE fonction. Depuis la colonne de type de données est - NTEXT, SQL Server ne m'autorise pas à utiliser l' REPLACE fonction.

Je ne peux pas changer le type de données à cause de cette base de données est 3eme partie logiciel de la table. Changer le type de données sera la cause de l'échec de l'application.

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

Je reçois cette erreur:

Msg 8116, Niveau 16, État 1, Ligne 1 Argument de type de données ntext est pas valide pour l'argument 1 de la fonction remplacer.

  • Je peux résoudre ce problème avec T-SQL? Quelqu'un a un exemple comment lire et à boucle?
  • Puisque c'est ponctuel de conversion, peut-être que je peux changer pour un autre type, mais je crains que je suis gâcher les données.

Il y a un champ de clé primaire: nom: ID - entier - c'est une identité.... J'ai donc besoin de penser à propos de cette trop. Peut-être définir l'Identité de N temporaire.

Veuillez vous informer sur la façon de réaliser la fonction REMPLACER?

Env. 3000 déclarations doivent être mis à jour avec une nouvelle solution.

211voto

p.campbell Points 42771

SI vos données ne sont pas de débordement de 4000 caractères ET vous êtes sur SQL Server 2000 ou le niveau de compatibilité de 8 ou SQL Server 2000:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

Pour SQL Server 2005+:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

18voto

LittleBobbyTables Points 17738

En supposant que SQL Server 2000, à la suite de StackOverflow question devrait résoudre votre problème.

Si vous utilisez SQL Server 2005/2008, vous pouvez utiliser le code suivant (prises à partir d' ici):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X