テキスト関数とイメージ関数 - TEXTPTR (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

textntext、または image 列に対応するテキスト ポインターの値を varbinary 形式で返します。 取得したテキスト ポインターの値は、READTEXT、WRITETEXT、および UPDATETEXT ステートメントで使用します。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代替機能を使用することはできません。

Transact-SQL 構文表記規則

構文

TEXTPTR ( column )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

column
使われる textntext、または image の列です。

戻り値の型

varbinary

解説

行内テキストがあるテーブルの場合、TEXTPTR では、処理するテキストのハンドルが返されます。 テキストの値が NULL である場合も、有効なテキスト ポインターを取得できます。

ビューの列に対して TEXTPTR 関数を使用することはできません。 それはテーブルの列に対してのみ使用できます。 ビューの列に対して TEXTPTR 関数を使用するには、ALTER DATABASE 互換性レベルを使用して互換性レベルを 80 に設定する必要があります。 テーブルに行内テキストがなく、textntext、または image 列が UPDATETEXT ステートメントで初期化されていない場合、TEXTPTR は NULL ポインターを返します。

テキスト ポインターが存在するかどうかをテストするには、TEXTVALID を使用します。 有効なテキスト ポインターがないと、UPDATETEXT、WRITETEXT、READTEXT は使用できません。

これらの関数とステートメントは、textntextimage データを操作する場合にも役立ちます。

関数またはステートメント 説明
PATINDEX('%pattern%' ,expression) text または ntext 列で指定された文字列の文字位置を返します。
DATALENGTH(expression) textntextimage 列のデータの長さを返します。
[SET TEXTSIZE] SELECT ステートメントで返される textntext、または image データの制限値をバイト単位で返します。
SUBSTRING(text_column, start, length) 指定された start オフセットと length で指定される varchar 文字列を返します。 長さは 8 KB 未満で指定してください。

Note

次の例を実行するには、pubs データベースをインストールする必要があります。

A. TEXTPTR を使用する

次の例では、TEXTPTR 関数を使用して、pubs データベースの pub_info テーブル内の New Moon Books に関連付けられている imagelogo を検索します。 テキスト ポインターは、ローカル変数 @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  

B. 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;  

C. テキスト データを返す

次の例では、pub_info テーブルから pub_id 列、および pr_info 列の 16 バイトのテキスト ポインターを選択します。

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)  

次の例では、TEXTPTR を使用せずにテキストの最初の 8000 バイトを返す方法を示します。

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)  

D. 特定のテキスト データを返す

次の例では、pubs データベースの pub_info テーブル内の pub_id``0736 に関連付けられた text 列 (pr_info) を検索します。 まず、ローカル変数 @val が宣言されます。 次に、テキスト ポインター (長いバイナリ文字列) が @val に挿入され、READTEXT ステートメントにパラメーターとして指定されます。 これによって、5 番目のバイト (オフセットは 4) から開始して、10 バイトのデータが返されます。

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)  

参照

DATALENGTH (Transact-SQL)
PATINDEX (Transact-SQL)
READTEXT (Transact-SQL)
SET TEXTSIZE (Transact-SQL)
テキスト関数とイメージ関数 (Transact-SQL)
UPDATETEXT (Transact-SQL)
WRITETEXT (Transact-SQL)