text、ntext 和 image (整理)
◆ 它们是MSSQL中用于存储大型非 Unicode 字符(text)、Unicode 字符(ntext)及二进制数据(image)的固定长度和可变长度数据类型,最大可达 2 GB。
◆用户可以在表上启用 text in row 选项,以使该表能够在其数据行中存储 text、ntext 或 image 数据。默认情况下text、ntext 或 image 字符串将存储在数据行外;只有这些字符串的文本指针驻留在数据行中,文本指针类型为 varbinary(16),使用 TEXTPTR ( column ),返回文本指针。
语法
◆用户可以在表上启用 text in row 选项,以使该表能够在其数据行中存储 text、ntext 或 image 数据。默认情况下text、ntext 或 image 字符串将存储在数据行外;只有这些字符串的文本指针驻留在数据行中,文本指针类型为 varbinary(16),使用 TEXTPTR ( column ),返回文本指针。
下例从 pub_info 表中选择 pub_id 列和 pr_info(text类型) 列的 16 字节文本指针。
USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO
◆ @@TEXTSIZE 指定 SELECT 语句返回的 text 或 image 数据的最大长度,以字节为单位。
下例显示如何在不使用 TEXTPTR 的情况下返回文本的前 8,000 个字节,pr_info是text类型
USE pubs
GO
SET TEXTSIZE 8000
SELECT pub_id, pr_info
FROM pub_info
ORDER BY pub_id
GO
◆READTEXT 读取 text、ntext 或 image 列中的 text、ntext 或 image 值,从指定的偏移量开始读取指定的字节数。语法READTEXT { table.column text_ptr offset size } [ HOLDLOCK ]
下例读取 pub_info 表中 pr_info(text类型) 列的第 2 个至第 26 个字符。
USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON pr.pub_id = p.pub_id
AND p.pub_name = 'New Moon Books'
READTEXT pub_info.pr_info @ptrval 1 25
GO
◆WRITETEXT 允许对现有的 text、ntext 或 image 列进行无日志记录的交互式更新。该语句将彻底重写受其影响的列中的任何现有数据。WRITETEXT 语句不能用在视图中的 text、ntext 和 image 列上。语法WRITETEXT { table.column text_ptr } [ WITH LOG ] { data
}
下例将文本指针放到局部变量 @ptrval 中,然后 WRITETEXT 将新的文本字符串放到 @ptrval 所指向的行中。
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
GO
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info.pr_info @ptrval '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!'
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'
GO
◆UPDATETEXT 更新现有 text、ntext 或 image 字段。使用 UPDATETEXT 在适当的位置更改 text、ntext 或 image 列的一部分。
语法
UPDATETEXT { table_name.dest_column_name dest_text_ptr
}
{ NULL | insert_offset
}
{ NULL | delete_length
}
[ WITH LOG ]
[ inserted_data
| { table_name.src_column_name src_text_ptr
} ]
本示例把文本指针置于局部变量 @ptrval 中,然后使用 UPDATETEXT 更新拼写错误。
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
GO
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @ptrval 88 1 'b'
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'
GO