Text 和 Image 函式 - TEXTPTR (Transact-SQL)
適用於:SQL Server
Azure SQL 受控執行個體
以 varbinary 格式傳回對應至 text、ntext 或 image 資料行的文字指標值。 擷取的文字指標值可用在 READTEXT、WRITETEXT 和 UPDATETEXT 陳述式中。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 無法使用替代功能。
Syntax
TEXTPTR ( column )
注意
若要檢視 SQL Server 2014 (12.x) 和更早版本的 Transact-SQL 語法,請參閱舊版文件。
引數
column
為將要使用的 text、ntext,或 image 資料行。
傳回型別
varbinary
備註
如果是含同資料列文字的資料表,TEXTPTR 會傳回要處理之文字的控制代碼。 即使文字值是 NULL,您也可以取得有效的文字指標。
在檢視的資料行上無法使用 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 位移和 length 所指定的 varchar 字串。 長度應該小於 8 KB。 |
範例
注意
若要執行下列範例,您必須安裝 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 搭配 in-row 文字
在 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_id
資料表中,選取 pr_info
資料行和 pub_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)
Text 和 Image 函數 (Transact-SQL)
UPDATETEXT (Transact-SQL)
WRITETEXT (Transact-SQL)