Поделиться через


Изменение данных в формате ntext, text или image

Если требуется заменить значение целиком, можно обновить значения ntext, text или image в строке следующими способами:

  • Сравнительно небольшое количество данных в инструкции UPDATE задается так же, как задаются данные типа char, nchar или binary.

  • Инструкцией WRITETEXT.

  • Приложения ADO могут воспользоваться методом AppendChunk для задания большого количества данных типа ntext, text или image.

  • Приложения OLE DB могут использовать интерфейс ISequentialStream для записи новых значений типа данных ntext, text или image. Дополнительные сведения см. в разделе Большие двоичные объекты и объекты OLE.

  • Приложения ODBC могут использовать форму «данные при выполнении» функции SQLPutData для записи новых значений типа ntext, text или image. Дополнительные сведения см. в разделе Управление столбцами text и image.

  • Приложения DB-Library могут пользоваться функцией dbwritetext. Дополнительные сведения см. в разделе Функции для работы с типами данных text и image (Transact-SQL).

SQL Server также поддерживает обновление только фрагмента значения типа ntext, text или image. В DB-Library это можно сделать при помощи функции dbupdatetext. Все остальные приложения и сценарии Transact-SQL, пакеты, хранимые процедуры и триггеры для изменения фрагмента столбца типа данных ntext, text или image могут использовать инструкцию UPDATETEXT.

В следующем сценарии демонстрируется использование UPDATETEXT с PATINDEX для поиска и замены определенной строки в значении типа text:

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

Результирующий набор из конечной инструкции SELECT выглядит следующим образом:

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