TEXTPTR (Transact-SQL)

傳回對應於 text、ntext 或 image 資料行的 varbinary 格式文字指標值。擷取的文字指標值可用在 READTEXT、WRITETEXT 和 UPDATETEXT 陳述式中。

重要注意事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 無法使用替代功能。

主題連結圖示Transact-SQL 語法慣例

語法

TEXTPTR ( column )

引數

  • column
    這是要用的 text、ntext 或 image 資料行。

傳回類型

varbinary

備註

在 SQL Server 2005 及更新版本中,如果是含同資料列文字的資料表,TEXTPTR 會傳回要處理之文字的控制代碼。即使文字值是 NULL,您也可以取得有效的文字指標。

在 SQL Server 2005 及更新版本中,檢視的資料行上無法使用 TEXTPTR 函數。您只能將它用於資料表資料行。若要在檢視資料行上使用 TEXTPTR 函數,您必須利用 ALTER DATABASE 相容性層級,將相容性層級設為 80。如果資料表沒有同資料列文字,且尚未利用 UPDATETEXT 陳述式來初始化 text、ntext 或 image 資料行,TEXTPTR 會傳回 Null 指標。

請利用 TEXTVALID 來測試文字指標是否存在。如果有效的文字指標不存在,您便無法使用 UPDATETEXT、WRITETEXT 或 READTEXT。

另外,當您使用 text、ntext 和 image 資料時,這些函數和陳述式也很有用。

函數或陳述式

描述

PATINDEX('%pattern%' , expression)

傳回指定字元字串在 text 或 ntext 資料行中的字元位置。

DATALENGTH(expression)

傳回 text、ntext 和 image 資料行中的資料長度。

SET TEXTSIZE

傳回 SELECT 陳述式所要傳回的 text、ntext 或 image 資料的限制 (以位元組為單位)。

SUBSTRING(text_column, start, length)

傳回指定的 start 位移所指定之 varchar 字串和 length。長度應該小於 8 KB。

範例

[!附註]

若要執行下列範例,您必須安裝 pubs 資料庫。如需有關如何安裝 pubs 資料庫的資訊,請參閱<下載 Northwind 和 pubs 範例資料庫>。

A. 使用 TEXTPTR

下列範例會利用 TEXTPTR 函數來尋找 pubs 資料庫的 pub_info 資料表中之 New Moon Books 的相關聯 image 資料行 logo。這個文字指標放在本機變數 @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_id0736 的相關聯 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)