? 下面的函数和语句可以与 ? ntext、text ? 或 ? image ? 数据一起使用。 ? ? 函数 ? ? ? ? ? ? ? ? ? ?????? ?语句 ? ? ? DATALENGTH ? ? ? ? READTEXT ? ? ? PATINDEX ? ? ? ? ? ? SET ? TEXTSIZE ? ? ? SUBSTRING ? ? ? ? ? UPDATETEXT ? ? ? TEXTPTR ? ? ? ? ? ? ? WRITETEXT ? ? ? TEXTVALID ? ? ? ? ? 主题:text字段 ? ? 1:替换 ? ? ? ? --创建数据测试环境 ? ? create ? table ? #tb(aa ? text) ? ? insert ? into ? #tb ? select ? 'abc123abc123,asd' ? ? ? ? --定义替换的字符串 ? ? declare ? @s_str ? varchar(8000),@d_str ? varchar(8000) ? ? select ? @s_str='123' ? --要替换的字符串 ? ?,@d_str='000' --替换成的字符串 ? ? ? ? --字符串替换处理 ? ? declare ? @p ? varbinary(16),@postion ? int,@rplen ? int ? ? select ? @p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1 ? from ? #tb ? ? while ? @postion>0 ? ? begin ? ? updatetext ? #tb.aa ? @p ? @postion ? @rplen ? @d_str ? ? select ? @postion=charindex(@s_str,aa)-1 ? from ? #tb ? ? end ? ? ? ? --显示结果 ? ? select ? * ? from ? #tb ? ? ? ? --删除数据测试环境 ? ? drop ? table ? #tb
--------------------------------------------------------------- ? ? ? ? /****************全部替换************************/ ? ? DECLARE ? @ptrval ? binary(16) ? ? SELECT ? @ptrval ? = ? TEXTPTR(aa) ? ? FROM ? ? #tb ? ? WHERE ? aa ? like ? '%数据2%' ? ? if ? @ptrval ? is ? not ? null ? ? ? ? ? ? ? ? -- ? 一定要加上此句,否则若找不到数据下一句就会报错 ? ? UPDATETEXT ? #tb.aa ? @ptrval ? 0 ? null ? '数据3' ? ? ? ? /****************在字段尾添加**********************************/ ? ? --定义添加的的字符串 ? ? declare ? @s_str ? varchar(8000) ? ? select ? @s_str='*C' ? --要添加的字符串 ? ? --字符串添加处理 ? ? declare ? @p ? varbinary(16),@rplen ? int ? ? select ? @p=textptr(detail) ? from ? test ? where ? id='001' ? ? updatetext ? test.detail ? @p ? null ? null ? @s_str ? ? ? ? 总结: ? ? 1:Text字段类型不能直接用replace函数来替换,必须用updatetext ? ? 2:字段比较不能用 where ? 字段 ? = ? ‘某数据’,可以用like来代替 ? ? 3:updatetext时,若@ptrval值为空会出错,需注意。
?
READTEXT ? ? 读取 ? text、ntext ? 或 ? image ? 列中的 ? text、ntext ? 或 ? image ? 值,从指定的偏移量开始读取指定的字节数。 ? ? ? ? 语法 ? ? READTEXT ? { ? table.column ? text_ptr ? offset ? size ? } ? [ ? HOLDLOCK ? ] ? ? ? ? ? 参数 ? ? table.column ? ? ? ? 是从中读取的表和列的名称。表名和列名必须符合标识符的规则。必须指定表名和列名,不过可以选择是否指定数据库名称和所有者名称。 ? ? ? ? text_ptr ? ? ? ? 有效文本指针。text_ptr ? 必须是 ? binary(16)。 ? ? ? ? offset ? ? ? ? 开始读取 ? text、image ? 或 ? ntext ? 数据之前跳过的字节数(使用 ? text ? 或 ? image ? 数据类型时)或字符数(使用 ? ntext ? 数据类型时)。使用 ? ntext ? 数据类型时,offset ? 是在开始读取数据前跳过的字符数。使用 ? text ? 或 ? image ? 数据类型时,offset ? 是在开始读取数据前跳过的字节数。 ? ? ? ? ? size ? ? ? ? 是要读取数据的字节数(使用 ? text ? 或 ? image ? 数据类型时)或字符数(使用 ? ntext ? 数据类型时)。如果 ? size ? 是 ? 0,则表示读取了 ? 4 ? KB ? 字节的数据。 ? ? ? ? HOLDLOCK ? ? ? ? 使文本值一直锁定到事务结束。其他用户可以读取该值,但是不能对其进行修改。 ? ? ? ? 注释 ? ? 使用 ? TEXTPTR ? 函数获得有效的 ? text_ptr ? 值。如果返回不止一行,TEXTPTR ? 将返回指向指定行中的 ? text、ntext ? 或 ? image ? 列的指针,或返回指向查询所返回的最后一行中的 ? text、ntext ? 或 ? image ? 列的指针。由于 ? TEXTPTR ? 返回 ? 16 ? 字节的二进制字符串,所以最好声明一个控制文本指针的局部变量,然后在 ? READTEXT ? 中使用该变量。有关声明局部变量的更多信息,请参见 ? DECLARE ? @local_variable。 ? ? ? ? ? 示例 ? ? 下例读取 ? pub_info ? 表中 ? pr_info ? 列的第 ? 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
?WR99vETEXT 允许对现有的 text、ntext 或 image 列进行无日志记录的交互式更新。该语句将彻底重写受其影响的列中的任何现有数据。WR99vETEXT 语句不能用在视图中的 text、ntext 和 image 列上。
UPDATETEXT 更新现有 text、ntext 或 image 字段。使用 UPDATETEXT 在适当的位置更改 text、ntext 或 image 列的一部分。使用 WR99vETEXT 来更新和替换整个 text、ntext 或 image 字段。
示例 本示例把文本指针置于局部变量 @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','false' GO
返回特定文本数据 下例在 pubs 数据库的 pub_info 表中查找与 pub_id 0736 相关联的 text 列 (pr_info)。下例首先声明一个局部变量 @val。然后将文本指针(长二进制字符串)置于 @val 中,并将其作为参数提供给 READTEXT 语句,该语句将返回从第五个字节(偏移量为 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
// 保存可執行文件到COMMON數據庫 long ll_filenum,ll_len,ll_ret blob lblb_c,lblb_total boolean lb_auto
lb_auto = gnv_app.inv_sec.autocommit gnv_app.inv_sec.autoco
mmit = true If not fileexists(as_file) Then RETURN FAILURE
?
ll_filenum = fileopen(as_file,StreamMode!,Read!,Shared!) ll_len = fileread(ll_filenum,lblb_c) do while ll_len > 0 lblb_total = lblb_total + lblb_c ll_len = fileread(ll_filenum,lblb_c) loop
fileclose(ll_filenum) updateblob app_files set content = :lblb_total where id = :al_id using gnv_app.inv_sec; ll_ret = gnv_app.inv_sec.SQLNRows gnv_app.inv_sec.autocommit = lb_auto If ll_Ret <= 0 Then RETURN FAILURE
RETURN SUCCESS
long ll_max,i integer li_FileNum
If len(ablb_data) = 0 Then return 0
li_FileNum = FileOpen(as_file,Write!,LockReadWrite!,Replace!) ll_max = len(ablb_data)
i = 0 do while ll_max > 0 FileWrite(li_FileNum,blobmid(ablb_data,i * 32765 + 1,32765)) ll_max = ll_max - 32765 i ++ Loop
fileclose(li_filenum)
RETURN 1
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|