我用ntext存储字符串,因为字符特别的长还有要存储一些特殊的字符,比如版权符号和商标符号之类的,但是我在对这个字段进行replace的时候,系统提示不可以对ntext字段进行replace,我转换为nvarchar(4000)吧,容量还不够,郁闷。哪位给个好的方法呀。

解决方案 »

  1.   

    -----给你一个老大的例子吧----
    --꿎桿鑒앴
    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
    --&#49343;&#54820;苟寧&#47800;&#63787;&#45561;&#51135;&#46056;鑒&#50548;
    SELECT @start=@start+LEN(@s)-@last_repl+1,
    @s=SUBSTRING(col,@start,@step),
    @len=LEN(@s),
    @last_repl=0
    FROM tb
    END
    GO--鞫刻&#45561;&#51135;&#50024;&#48270;
    SELECT datalength(col),* FROM tb
    DROP TABLE tb