Ä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