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


WRITETEXT (Transact-SQL)

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

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

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

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

Синтаксис

WRITETEXT { table.column text_ptr }
    [ WITH LOG ] { data }

Аргументы

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

  • text_ptr
    Значение, в котором хранится указатель на данные типа text, ntext или image. Аргумент text_ptr имеет тип binary(16). Для создания текстового указателя следует выполнить инструкцию INSERT или UPDATE с ненулевыми данными для столбца типа text, ntext или image.

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

  • data
    Представляет собой фактические данные типа text, ntext или image, предназначенные для хранения. Аргумент data может быть литералом или переменной. Максимальная длина текста, который можно вставить интерактивно с помощью инструкции WRITETEXT — приблизительно 120 КБ для данных типа text, ntext и image.

Замечания

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

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

Если модель восстановления базы данных простая или с неполным протоколированием, операции над данными text, ntext и image, в которых используется инструкция WRITETEXT, выполняются с минимальным ведением журнала при вставке или добавлении новых данных. Дополнительные сведения см. в разделе Операции, для которых возможно минимальное протоколирование.

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

Когда обновляются существующие значения, занесение записей в журнал не сокращается до минимума.

Для корректного выполнения инструкции WRITETEXT столбец уже должен содержать действительный указатель на текст.

Если в строке таблицы не содержится текст, SQL Server экономит пространство, не выполняя инициализации столбцов text при добавлении явных или неявных значений NULL в столбцы text с помощью инструкции INSERT. Для этих значений NULL не может быть получен указатель на текст. Для инициализации столбцов text значением NULL следует использовать инструкцию UPDATE. Если в строке таблицы содержится текст, не нужно заполнять столбцы типа text значениями NULL и всегда можно получить указатель на текст.

Функция ODBC SQLPutData выполняется быстрее и занимает меньше динамической памяти, чем инструкция WRITETEXT. С помощью этой функции можно вставить до 2 гигабайт (ГБ) данных типа text, ntext или image.

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

Разрешения

Требует разрешения UPDATE для указанной таблицы. Разрешение может передаваться, если передано разрешение UPDATE.

Примеры

В следующем примере указатель на текст вводится в локальную переменную @ptrval, а затем инструкция WRITETEXT помещает новую строку текста в строку, на которую указывает @ptrval.

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

Для выполнения данного примера необходимо установить образец базы данных 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'
WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) has just released another top ten publication. With the latest publication this makes NMB the hottest new publisher of the year!';
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO