Freigeben über


Ändern von ntext-, text- und image-Daten

Wenn Sie den gesamten Wert ersetzen, können Sie Werte vom Typ ntext, text oder image auf folgende Weise hintereinander aktualisieren:

  • Geben Sie relativ kleine Datenmengen in einer UPDATE-Anweisung an, wie bei Daten vom Typ char, nchar oder binary.

  • Verwenden Sie WRITETEXT.

  • ADO-Anwendungen können mithilfe der AppendChunk-Methode große Mengen an Daten vom Typ ntext, text oder image angeben.

  • OLE DB-Anwendungen können die ISequentialStream-Schnittstelle zum Schreiben neuer Werte vom Typ ntext, text oder image verwenden. Weitere Informationen finden Sie unter BLOBs und OLE-Objekte.

  • ODBC-Anwendungen können das Formular für Data-at-Execution (Daten-in-Ausführung) von SQLPutData zum Schreiben neuer Werte vom Typ ntext, text oder image verwenden. Weitere Informationen finden Sie unter Verwalten von Text und Bildspalten.

  • DB-Library-Anwendungen können die dbwritetext-Funktion verwenden. Weitere Informationen finden Sie unter Text- und Bildfunktionen (Transact-SQL).

Mit SQL Server kann auch nur ein Teil eines Werts vom Typ ntext, text oder image aktualisiert werden. In der DB-Library kann hierfür die dbupdatetext-Funktion verwendet werden. Alle anderen Anwendungen und Transact-SQL-Skripts, Batches und gespeicherten Prozeduren sowie Trigger können mithilfe der UPDATETEXT-Anweisung nur einen Teil einer Spalte vom Typ ntext, text oder image aktualisieren.

Das folgende Skript zeigt, wie UPDATETEXT mit PATINDEX zum Suchen nach und Ersetzen von einer bestimmten Zeichenfolge in einem text-Wert verwendet werden kann:

USE Northwind
GO
CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT)
GO
INSERT INTO TextParts
   VALUES( 1,
           'Sample string START TAG Text to go END TAG Trailing text.')
GO
DECLARE @PtrVar BINARY(16)
DECLARE @InsertPos INT
DECLARE @DeleteLen INT

SELECT @PtrVar = TEXTPTR(ColB),
       @InsertPos = (PATINDEX('%START TAG%', ColB) + 9),
       @DeleteLen = (
                      PATINDEX('%END TAG%', ColB) -
                      ( PATINDEX('%START TAG%', ColB) + 9
                              + 2 /* allow for blanks */ )
                    )
FROM TextParts
WHERE ColA = 1

UPDATETEXT TextParts.ColB
           @PtrVar
           @InsertPos
           @DeleteLen
           WITH LOG
           'The new text'
GO

SELECT * FROM TextParts
GO

Im Folgenden wird das von der letzten SELECT-Anweisung zurückgegebene Resultset aufgeführt:

ColA        ColB
----------- ------------------------------------------------------------
1           Sample string START TAG The new text END TAG Trailing text.