TEXTPTR: примеры (SQL)

Функция TEXTPTR в Microsoft SQL Server
Раздел: Функции работы с большими объектами (LOB)
TEXTPTR(column_name): varbinary(16)

Описание функции TEXTPTR

Функция TEXTPTR в Microsoft SQL Server возвращает указатель на текстовое или image-значение в формате varbinary(16). Этот указатель используется в устаревших операциях для работы с типами данных text, ntext и image, таких как READTEXT, WRITETEXT и UPDATETEXT.

Функция принимает один аргумент - имя столбца соответствующего типа. Если значение столбца равно NULL, функция также возвращает NULL. Использование этой функции актуально для устаревшего кода, так как типы text, ntext и image заменены на varchar(max), nvarchar(max) и varbinary(max).

Простые примеры TEXTPTR

Получение указателя для столбца типа text.

DECLARE @ptr VARBINARY(16)
SELECT @ptr = TEXTPTR(PrInfo) FROM pub_info WHERE pub_id = '0736'
SELECT @ptr AS Указатель;
Указатель
0xFFFF000000000000

Попытка получить указатель для NULL-значения.

SELECT TEXTPTR(Комментарий) AS Ptr FROM Таблица WHERE ID = 5;
Ptr
NULL

Похожие функции в MS SQL

Для современных типов данных varchar(max), nvarchar(max) и varbinary(max) прямое использование TEXTPTR не требуется. Вместо этого применяются стандартные строковые функции (SUBSTRING, PATINDEX) или метод .WRITE для частичного обновления. Для больших объектов (LOB) иногда используют оператор UPDATE с SET, который эффективно работает с MAX-типами.

Аналоги в других СУБД и языках

В Oracle для CLOB и BLOB используют пакет DBMS_LOB и методы доступа по курсору. В PostgreSQL для типа TEXT применяются обычные строковые функции, а для больших объектов - интерфейс lo. В MySQL для LONGTEXT и LONGBLOB работают стандартные строковые операции. SQLite и Sybase ASE имеют свои методы для LOB, но прямого аналога TEXTPTR нет.

Пример для Oracle:

DECLARE
  lob_loc CLOB;
  amount INTEGER := 10;
BEGIN
  SELECT text_column INTO lob_loc FROM docs WHERE id = 1;
  DBMS_LOB.READ(lob_loc, amount, 1, buffer);
END;

Распространенные ошибки

Ошибка при использовании для неподдерживаемого типа данных.

SELECT TEXTPTR(Имя) FROM Клиенты;
Сообщение 257, уровень 16, состояние 3
Недопустимый тип данных для текстового указателя.

Использование неинициализированного или устаревшего указателя после обновления данных.

DECLARE @p VARBINARY(16)
SELECT @p = TEXTPTR(Текст) FROM Таблица WHERE ID=1
UPDATE Таблица SET Текст = 'Новый' WHERE ID=1
-- Указатель @p теперь недействителен
READTEXT Таблица.Текст @p 0 5;
Может вызвать непредсказуемое поведение или ошибку.

История изменений функции

Начиная с SQL Server 2005, типы данных text, ntext и image объявлены устаревшими. Функция TEXTPTR сохраняется для обратной совместимости, но ее использование не рекомендуется. Вместо этого следует применять типы varchar(max), nvarchar(max) и varbinary(max).

Расширенные примеры применения

Использование TEXTPTR с UPDATETEXT для вставки в середину текста.

Пример sql
DECLARE @ptr VARBINARY(16)
SELECT @ptr = TEXTPTR(Описание) FROM Продукты WHERE Код = 10
UPDATETEXT Продукты.Описание @ptr 10 0 ' дополнение '
SELECT * FROM Продукты WHERE Код = 10;

Чтение фрагмента текста с помощью READTEXT.

Пример sql
DECLARE @ptr VARBINARY(16), @val VARCHAR(50)
SELECT @ptr = TEXTPTR(Примечание) FROM Заказы WHERE Номер=1001
READTEXT Заказы.Примечание @ptr 0 25;

Проверка допустимости указателя с помощью TEXTVALID.

Пример sql
SELECT TEXTVALID('Продукты.Описание', TEXTPTR(Описание)) AS IsValidPtr FROM Продукты;
IsValidPtr
1

MS SQL TEXTPTR function comments

En
TEXTPTR Returns the text-pointer value that corresponds to a text, ntext, or image column