Compartilhar via


Alterando dados ntext, text ou image

Quando você substituir o valor inteiro, será possível atualizar os valores ntext, text ou image em uma linha do seguinte modo:

  • Especifique quantidades relativamente pequenas de dados em uma instrução UPDATE da mesma forma que são determinados os dados char, nchar ou binary.

  • Use WRITETEXT.

  • Aplicativos ADO podem usar o método AppendChunk para especificar grandes quantidades de dados ntext, text ou image.

  • Aplicativos OLE DB podem usar a interface ISequentialStream para escrever valores novos ntext, text ou image. Para obter mais informações, consulte BLOBs e objetos OLE.

  • Aplicativos ODBC podem usar o formulário de execução de dados de SQLPutData para escrever novos valores ntext, text ou image. Para obter mais informações, consulte Gerenciando colunas de texto e imagem.

  • Aplicativos da biblioteca do banco de dados podem usar a função dbwritetext. Para obter mais informações, consulte Funções de texto e imagem (Transact-SQL).

O SQL Server também dá suporte apenas à atualização de parte de um valor ntext, text ou image. Na biblioteca do banco de dados você pode fazer isso usando a função dbupdatetext. Todos os outros aplicativos e Transact-SQLscripts, lotes, procedimentos armazenados e gatilhos podem usar a instrução UPDATETEXT para atualizar apenas uma parte de uma coluna ntext, text ou image.

O script seguinte mostra o uso de UPDATETEXT com PATINDEX para encontrar e substituir uma cadeia de caracteres específica em um valor 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

O conjunto de resultados da instrução SELECT final é:

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