Функция TEXTPTR (Transact-SQL)
Возвращает значение указателя текста, которое соответствует столбцу text, ntext или image в формате varbinary. Извлеченное значение указателя текста может быть использовано в инструкциях READTEXT, WRITETEXT и UPDATETEXT.
Важно! |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Дополнительные возможности недоступны. |
Синтаксис
TEXTPTR ( column )
Аргументы
- column
Используемый столбец типа text, ntext или image.
Типы возвращаемых данных
varbinary
Замечания
В SQL Server 2005 и более поздних версиях для таблиц с внутристрочным текстом функция TEXTPTR возвращает указатель для обрабатываемого текста. Можно получить правильный указатель на текст даже в том случае, если значение текста NULL.
В SQL Server 2005 и более поздних версиях нельзя использовать функцию TEXTPTR для столбцов представлений. Она может быть использована только для столбцов таблицы. Чтобы использовать функцию TEXTPTR для столбца представления, необходимо установить уровень совместимости в значение 80 при помощи инструкции ALTER DATABASE Compatibility Level. Если таблица не содержит в строке текстовых данных и если столбец типа text, ntext или image не был инициализирован при помощи инструкции UPDATETEXT, TEXTPTR возвращает указатель со значением NULL.
Используйте TEXTVALID, чтобы проверить, существует ли указатель на текст. Нельзя использовать инструкции UPDATETEXT, WRITETEXT или READTEXT без допустимых указателей текста.
Эти функции и инструкции также полезны при работе с данными типа text, ntext и image.
Функция или инструкция |
Описание |
---|---|
PATINDEX('%pattern%' ,expression) |
Возвращает позицию символа в заданной строке символов в столбцах text или ntext. |
DATALENGTH(expression) |
Возвращает длину данных в столбцах типа text, ntext и image. |
SET TEXTSIZE |
Возвращает предельный размер в байтах для данных типа text, ntext или image, которые должны быть возвращены инструкцией SELECT. |
SUBSTRING(text_column, start, length) |
Возвращает строку типа varchar, указанную при помощи заданного сдвига start и length. Длина должна быть меньше 8 KБ. |
Примеры
Примечание |
---|
Для выполнения следующих примеров необходимо установить базу данных pubs. Дополнительные сведения об установке базы данных pubs см. в разделе Загрузка образцов баз данных Northwind и pubs. |
А. Использование TEXTPTR
На следующем примере показано, как использовать функцию TEXTPTR для нахождения столбца imagelogo, связанного с New Moon Books в таблице pub_info базы данных pubs. Указатель на текст заносится в локальную переменную @ptrval.
USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(logo)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
GO
Б. Использование TEXTPTR с внутрирядным текстом
В SQL Server указатель на внутрирядный текст должен использоваться внутри транзакции, как показано в примере.
CREATE TABLE t1 (c1 int, c2 text)
EXEC sp_tableoption 't1', 'text in row', 'on'
INSERT t1 VALUES ('1', 'This is text.')
GO
BEGIN TRAN
DECLARE @ptrval VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 1
READTEXT t1.c2 @ptrval 0 1
COMMIT
В. Возвращение текстовых данных
На следующем примере показано, как выбрать столбец pub_id и указатель на 16-байтовый текст столбца pr_info column из таблицы pub_info.
USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO
Ниже приводится результирующий набор.
pub_id
------ ----------------------------------
0736 0x6c0000000000feffb801000001000100
0877 0x6d0000000000feffb801000001000300
1389 0x6e0000000000feffb801000001000500
1622 0x700000000000feffb801000001000900
1756 0x710000000000feffb801000001000b00
9901 0x720000000000feffb801000001000d00
9952 0x6f0000000000feffb801000001000700
9999 0x730000000000feffb801000001000f00
(8 row(s) affected)
На следующем примере показано, как вернуть первые 8000 байт текста, не используя TEXTPTR.
USE pubs
GO
SET TEXTSIZE 8000
SELECT pub_id, pr_info
FROM pub_info
ORDER BY pub_id
GO
Ниже приводится результирующий набор.
pub_id pr_info
------ -----------------------------------------------------------------
0736 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!
0877 This is sample text data for Binnet & Hardley, publisher 0877 in the pubs database. Binnet & Hardley is located in Washington, D.C.
This is sample text data for Binnet & Hardley, publisher 0877 in the pubs database. Binnet & Hardley is located in Washi
1389 This is sample text data for Algodata Infosystems, publisher 1389 in the pubs database. Algodata Infosystems is located in Berkeley, California.
9999 This is sample text data for Lucerne Publishing, publisher 9999 in the pubs database. Lucerne publishing is located in Paris, France.
This is sample text data for Lucerne Publishing, publisher 9999 in the pubs database. Lucerne publishing is located in
(8 row(s) affected)
Г. Возвращение заданных текстовых данных
На следующем примере показано, как обнаружить столбец text (pr_info), ассоциированный с pub_id0736 в таблице pub_info базы данных pubs. Сначала объявляется локальная переменная @val. После этого указатель на текст (длинная двоичная строка) записывается в @val и передается в качестве параметра в инструкцию READTEXT. Тем самым возвращается 10 байт, начиная с пятого (сдвиг равен 4).
USE pubs
GO
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(pr_info)
FROM pub_info
WHERE pub_id = '0736'
READTEXT pub_info.pr_info @val 4 10
GO
Ниже приводится результирующий набор.
pr_info
-----------------------------------------------------------------------
is sample
(1 row(s) affected)