WRITETEXT (Transact-SQL)

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

ms186838.note(ru-ru,SQL.90).gifВажно!
В будущей версии 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, выполняются с минимальным ведением журнала при вставке или добавлении новых данных. Дополнительные сведения см. в разделе Операции с минимальным протоколированием.

ms186838.note(ru-ru,SQL.90).gifПримечание.
Когда обновляются существующие значения, занесение записей в журнал не сокращается до минимума.

Для корректного выполнения инструкции 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.

ms186838.note(ru-ru,SQL.90).gifПримечание.
Для выполнения данного примера необходимо установить образец базы данных 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

См. также

Справочник

Типы данных (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DELETE (Transact-SQL)
SELECT (Transact-SQL)
SET (Transact-SQL)
UPDATETEXT (Transact-SQL)

Другие ресурсы

Использование типов данных больших значений

Справка и поддержка

Получение помощи по SQL Server 2005