UPDATETEXT (Transact-SQL)

Обновляет существующее поле text, ntext или image. Используйте UPDATETEXT для изменения только части столбца text, ntext или image. Используйте WRITETEXT для обновления и замены всего поля text, ntext или image.

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Вместо этого пользуйтесь типами данных большого объема и предложением .WRITE инструкции UPDATE.

Значок ссылки на разделСоглашение о синтаксисе Transact-SQL

Синтаксис

UPDATETEXT [BULK] { table_name.dest_column_name dest_text_ptr }
    { NULL | insert_offset }
     { NULL | delete_length }
     [ WITH LOG ]
     [ inserted_data
    | { table_name.src_column_name src_text_ptr } ]

Аргументы

  • BULK
    Включает внешние средства для передачи потока двоичных данных. Поток должен быть передан средством на уровне протокола TDS. В отсутствие потока данных обработчик запросов не учитывает параметр BULK.

    Важное примечаниеВажно!

    Рекомендуется не использовать параметр BULK в приложениях с поддержкой SQL Server. Этот параметр может быть изменен или удален в следующих версиях SQL Server.

  • table_name**.**dest_column_name
    Имя таблицы и обновляемого столбца text, ntext или image. Имена таблиц и имена столбцов должны соответствовать правилам для идентификаторов. Указание имени базы данных и владельца необязательно.

  • dest_text_ptr
    Значения текстового указателя (возвращается функцией TEXTPTR), который указывает на обновляемые данные типа text, ntext или image. Аргумент dest_text_ptr должен иметь тип binary(16).

  • insert_offset
    Начальная позиция для обновления. Отсчет начинает с нуля. Для столбцов text или imageinsert_offset является числом байтов, которые необходимо пропустить с начала существующего столбца, перед вставкой новых данных. Для столбцов ntext аргумент insert_offset является набором символов (каждый символ имеет тип ntext и занимает 2 байта). Существующие данные text, ntext или image, начиная с этой начальной позиции (отсчет начинает с нуля), сдвигаются вправо, чтобы освободить место для новых данных. При значении 0 новые данные вставляются в начало существующих данных. Если значение равно NULL, новые данные добавляются в конец существующих.

  • delete_length
    Длина удаляемых данных из существующего столбца text, ntext или image начиная с позиции, указанной в аргументе insert_offset. Значение аргумента delete_length задается в байтах для столбцов text и image и в символах для столбцов ntext. Каждый символ ntext занимает 2 байта. При значении 0 данные не удаляются. При значении NULL удаляются все данные с позиции, указанной аргументом insert_offset , до конца существующего столбца text или image.

  • WITH LOG
    Ведение журнала определяется моделью восстановления, действующей для базы данных.

  • inserted_data
    Вставляемые в существующий столбец text, ntext или image данные на позиции insert_offset. Это значение char, nchar, varchar, nvarchar, binary, varbinary, text, ntext или image. Аргумент inserted_data может быть литералом или переменной.

  • table_name.src_column_name
    Имя таблицы и столбца text, ntext или image, используемого в качестве источника вставляемых данных. Имена таблиц и имена столбцов должны соответствовать правилам для идентификаторов.

  • src_text_ptr
    Значение текстового указателя (возвращается функцией TEXTPTR), который указывает на столбец text, ntext или image, используемый в качестве источника вставляемых данных.

    ПримечаниеПримечание

    Значение scr_text_ptrне должно равняться значению dest_text_ptr.

Замечания

Вставленные данные могут быть константой inserted_data, именем таблицы, именем столбца или указателем на текст.

Операция обновления

Параметры UPDATETEXT

Для замены существующих данных

Укажите значение аргумента insert_offset, отличное от NULL, ненулевое значение аргумента delete_length и новые вставляемые данные.

Для удаления существующих данных

Укажите значение аргумента insert_offset, отличное от NULL, и ненулевое значение аргумента delete_length. Не указывайте вставляемые данные.

Для вставки новых данных

Укажите значение аргумента insert_offset, отличное от NULL, значение аргумента delete_length, равное 0, и вставляемые данные.

Для улучшения производительности рекомендуется вставлять и обновлять данные text, ntext и image фрагментами с размером, кратным 8 040 байт.

В SQL Server внутристрочные текстовые указатели на данные text, ntext или image могут существовать, но могут быть неверными. Дополнительные сведения о параметре text in row см. в разделе sp_tableoption (Transact-SQL). Дополнительные сведения о допустимости указателей текста см. в sp_invalidate_textptr (Transact-SQL).

Для присвоения столбцам text значения NULL используйте инструкцию UPDATETEXT при уровне совместимости, равном 65. Если уровень совместимости равен 70, используйте инструкцию WRITETEXT для присвоения текстовым столбцам значения NULL, иначе инструкция UPDATETEXT присваивает столбцам text значение пустой строки. Для получения дополнительных сведений об установке уровня совместимости см. в разделе sp_dbcmptlevel (Transact-SQL).

Разрешения

Необходимо разрешение UPDATE на указанную таблицу.

Примеры

Следующий пример присваивает локальной переменной @ptrval значение текстового указателя и использует UPDATETEXT для исправления грамматической ошибки.

ПримечаниеПримечание

Чтобы запустить данный пример, требуется установить базу данных pubs. Сведения об установке базы данных pubs см. в разделе Загрузка образцов баз данных Northwind и pubs.

USE pubs;
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(pr_info) 
   FROM pub_info pr, publishers p
      WHERE p.pub_id = pr.pub_id 
      AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @ptrval 88 1 'b';
GO
ALTER DATABASE pubs SET RECOVERY FULL;
GO