SQL Server 2005 ntext字段的REPLACE处理

王朝mssql·作者佚名  2008-06-13
窄屏简体版  字體: |||超大  

SQL Server2005开发应用实例──ntext字段的REPLACE处理示例:

--测试数据

CREATE TABLE tb(col ntext)

INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'

+'220000001,302000004,500200006,700002008,900002120,',800))

DECLARE @p binary(16)

SELECT @p=TEXTPTR(col) FROM tb

UPDATETEXT tb.col @p NULL 0 tb.col @p

GO

--替换处理定义

DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)

SELECT @s_str='00' --要替换的字符串

,@r_str='0000' --替换成该字符串

DECLARE @p varbinary(16)

DECLARE @start int,@s nvarchar(4000),@len int

DECLARE @s_len int,@step int,@last_repl int,@pos int

--替换处理参数设置

SELECT

--用于要判断每次截取数据,最后一个被替换数据位置的处理

@s_len=LEN(@s_str),

--设置每次应该截取的数据的长度,防止REPLACE后数据溢出

@step=CASE WHEN LEN(@r_str)>LEN(@s_str)

THEN 4000/LEN(@r_str)*LEN(@s_str)

ELSE 4000 END

--替换处理的开始位置

SELECT @start=PATINDEX('%'+@s_str+'%',col),

@p=TEXTPTR(col),

@s=SUBSTRING(col,@start,@step),

@len=LEN(@s),

@last_repl=0

FROM tb

WHERE PATINDEX('%'+@s_str+'%',col)>0

AND TEXTVALID('tb.col',TEXTPTR(col))=1

WHILE @len>=@s_len

BEGIN

--得到最后一个被替换数据的位置

WHILE CHARINDEX(@s_str,@s,@last_repl)>0

SET @last_repl=@s_len

+CHARINDEX(@s_str,@s,@last_repl)

--如果需要,更新数据,同时判断下一个取数位置的偏移量

IF @last_repl=0

SET @last_repl=@s_len

ELSE

BEGIN

SELECT @last_repl=CASE

WHEN @len<@last_repl THEN 1

WHEN @len-@last_repl>=@s_len THEN @s_len

ELSE @len-@last_repl+2 END,

@s=REPLACE(@s,@s_str,@r_str),

@pos=@start-1

UPDATETEXT TB.col @p @pos @len @s

END

--获取下一个要处理的数据

SELECT @start=@start+LEN(@s)-@last_repl+1,

@s=SUBSTRING(col,@start,@step),

@len=LEN(@s),

@last_repl=0

FROM tb

END

GO

--显示处理结果

SELECT datalength(col),* FROM tb

DROP TABLE tb

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航