且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SqlServer数据库长文本和二进制字段操作总结(54powerman原创)

更新时间:2022-05-24 06:28:53

SqlServer数据库长文本和二进制字段操作总结(54powerman原创)
--创建测试用表 Create Table TestnText (RowID Int Identity(1,1) Primary Key,Content nText) --读写nText文本,一定要用在事物中 Begin Tran DECLARE @ptrval varbinary(16) Select @ptrval=TEXTPTR(content) From TestnText Where RowID=1 --TEXTPTR函数以 varbinary 格式返回对应于 text、ntext 或 image 列的文本指针值。检索到的文本指针值可用于 READTEXT、WRITETEXT 和 UPDATETEXT 语句。 Select RowID,DATALENGTH(Content) From TestnText --要获取Content内容的长度要使用DATALENGTH函数来获取,结果为字节数 --要使用行文本指针,先获得指针 ReadText TestnText.Content @ptrval 1 10 --第一个参数为字段,一定要用表名限制字段, --第三个参数是开始读取 text、image 或 ntext 数据之前跳过的字节数,如果从开始选择为0 --第四个参数是选择的长度。是要读取数据的字节数(使用 text 或 image 数据类型时)或字符数(使用 ntext 数据类型时)。 --第五个参数可选,若值为HOLDLOCK,则表明使文本值一直锁定到事务结束。其他用户可以读取该值,但是不能对其进行修改。 SET TEXTSIZE 5 --如果此时指定TextSize则会限制以后的读取 ReadText TestnText.Content @ptrval 1 10 --由于上面指定了TextSize,所以此时返回了少于10个字节的数据,而只返回了5个字节 WriteText TestnText.Content @ptrval '请使用 WRITETEXT 来替换 text、ntext 和 image 数据,而用 UPDATETEXT 来修改 text、ntext 和 image 数据。UPDATETEXT 更灵活,因为它仅更改 text、ntext 或 image 列的某一部分,而不是整个列。如果数据库恢复模型简单或有大容量日志记录,则 WRITETEXT 是无日志记录的操作。这就意味着在将 text、ntext 或 image 数据写入数据库时,不会进行日志记录;因此,事务日志不会填满大量通常由这些数据类型组成的数据。为使 WRITETEXT 正常工作,列必须已经包含有效的文本指针。 如果该表没有行内文本,则在通过 INSERT 向 text 列中放入显式或隐式空值时,SQL Server 不初始化 text 列,从而节省了空间,而且不能获取这类空值的文本指针。若要将 text 列初始化为 NULL,请使用 UPDATE 语句。如果该表有行内文本,就没有必要为空值初始化文本列,而且您始终可以获取文本指针。与 WRITETEXT 相比,DB-Library dbwritetext 和 dbmoretext 函数以及 ODBC SQLPutData 函数速度较快且使用的动态内存较少。这些函数可以插入多达 2G 字节的 text、ntext 或 image 数据。' --第三个参数是要写入的文本, Set TextSize 0 --释放前面设定的TextSize设置 ReadText TestnText.Content @ptrval 0 100 UpdateText TestnText.Content @ptrval 3 1 '不要使' --第三个参数是以零为基的更新起始位置,或者说是插入数据的位置。 --第四个参数是是从 insert_offset 位置开始的、要从现有 text、ntext 或 image 列中删除的数据长度,或者要用新数据替换掉的数据长度。 ReadText TestnText.Content @ptrval 0 100 Select PATINDEX('%使用%', Content) From TestnText Commit /* 常用的函数: 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。 TEXTVALID('table.column',text_ptr)一个 text、ntext 或 image 函数,用于检查给定文本指针是否有效。 */