Je dois mettre à jour/remplacer les données dans datatable.column. La table a un champ nommé Content
. J'utilise la fonction REPLACE
. Étant donné que le type de données de la colonne est NTEXT
, SQL Server ne me permet pas d'utiliser la fonction REPLACE
.
Je ne peux pas changer le type de données car cette base de données est une table logicielle tierce. Changer le type de données entraînera 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 Le type de données d'argument ntext n'est pas valide pour l'argument 1 de la fonction replace.
Il existe un champ de clé primaire: nom: ID - entier - c’est une identité ... Il faut donc que je réfléchisse à cela aussi. Peut-être définir l'identité sur N temporaire.
S'il vous plaît donner des conseils sur la façon de réaliser la fonction REPLACE?
Environ. 3000 déclarations doivent être mises à jour avec une nouvelle solution.
SI vos données ne déborderont pas de 4000 caractères ET vous êtes sur SQL Server 2000 ou 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%'
En supposant que SQL Server 2000, la question suivante question StackOverflow devrait résoudre votre problème.
Si vous utilisez SQL Server 2005/2008, vous pouvez utiliser le code suivant (tiré de here ):
select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable