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 and OLE Objects.
  • 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 Managing Text and Image Columns.
  • DB-Library-Anwendungen können die dbwritetext-Funktion verwenden. Weitere Informationen finden Sie unter Text- und Bildfunktionen (Transact-SQL).

Mit SQL Server 2005 kann auch nur ein Teil eines Wertes 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.

Siehe auch

Konzepte

Ändern von Daten mit UPDATE
Ändern von Daten durch Verwenden eines Cursors

Andere Ressourcen

Downloaden der Beispieldatenbanken Northwind und pubs

Hilfe und Informationen

Informationsquellen für SQL Server 2005