Frage Alternativen zu REPLACE für einen Text- oder Ntext-Datentyp


Ich muss die Daten in datatable.column aktualisieren / ersetzen. Die Tabelle hat ein Feld namens Content. Ich benutze die REPLACE Funktion. Da der Spaltentyp ist NTEXT, SQL Server erlaubt mir nicht, das zu verwenden REPLACE Funktion.

Ich kann den Datentyp nicht ändern, da diese Datenbank eine Drittanbieter-Softwaretabelle ist. Wenn Sie den Datentyp ändern, schlägt die Anwendung fehl.

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

Ich erhalte diesen Fehler:

Msg 8116, Ebene 16, Status 1, Zeile 1   Der Argumentdatentyp ntext ist für das Argument 1 der Replace-Funktion ungültig.

  • Kann ich das mit T-SQL beheben? Hat jemand ein Beispiel wie man liest und loopt?
  • Da es sich um eine einmalige Konvertierung handelt, kann ich vielleicht zu einem anderen Typ wechseln, aber ich befürchte, dass ich die Daten durcheinander bringe.

Es gibt ein primäres Schlüsselfeld: name: ID - integer - es ist eine Identität .... Also muss ich auch darüber nachdenken. Vielleicht setzen Sie die Identität auf N temporär.

Bitte beraten Sie, wie Sie die REPLACE-Funktion erreichen können.

Ca. 3000 Anweisungen müssen mit einer neuen Lösung aktualisiert werden.


80
2017-12-03 01:10


Ursprung


Antworten:


OB Ihre Daten werden 4000 Zeichen nicht überschreiten UND Sie sind auf SQL Server 2000 oder Kompatibilitätsgrad 8 oder 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%' 

Für 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%' 

167
2017-12-03 01:23



Angenommen, SQL Server 2000 ist Folgendes StackOverflow-Frage sollte Ihr Problem ansprechen.

Wenn Sie SQL Server 2005/2008 verwenden, können Sie den folgenden Code verwenden (aus Hier):

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

12
2017-12-03 01:15