想往CALCS_ACTIONS 表的calcul 字段(text)在原有的文本下移行再加一段文本(文本如下):
'
:DECLARE temp;
:IF LimsTypeEX(C)="STRING" .OR. LimsTypeEX(V0)="STRING" .OR. LimsTypeEX(V)="STRING".OR. LimsTypeEX(V1)="STRING"  ;
        UsrMes("错误", "该项目需要计算参数。计算参数没有输入");
        temp:=0;
:ELSE;
        temp:=((V1-V0)*C*100.09*1000)/V;
:ENDIF;
:RETURN temp;
'
因为字段类型是text,不会修改,请各位高手指点.条件是下面这样的(此处用update肯定不对,因该用updatetext,看了帮助还要textprt?()函数之类的,没看懂,不会改):update CALCS_ACTIONS set calcul =calcul+
'
我想新增的文本
'
where CALCNAME in(
SELECT CALCNAME FROM ANALYTES  
WHERE TESTCODE IN (SELECT TESTCODE FROM TESTS WHERE TESTCATCODE  IN ('理化-食品','理化-职业卫生'))
AND ANALPRINT='y' and CALCNAME is not null
)

解决方案 »

  1.   


    sql 中 text/ntext列的一些处理技巧2008-09-04 17:301.update ntext:
    (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。
        update 表名 
        set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')
        update 表名 
        set ntext类型字段名=replace(convert(nvarchar(4000),ntext类型字段名),'要替换的字符','替换成的值') 
    (2)如果text/ntext超过8000/4000,看如下例子
        declare @pos int
        declare @len int
        declare @str nvarchar(4000)
        declare @des nvarchar(4000)
        declare @count int   
        set @des ='<requested_amount+1>'--要替换成的值
        set @len=len(@des)
        set @str= '<requested_amount>'--要替换的字符    set @count=0--统计次数.    WHILE 1=1
        BEGIN
            select @pos=patINDEX('%'+@des+'%',propxmldata) - 1
            from 表名
            where 条件       IF @pos>=0
           begin
               DECLARE @ptrval binary(16)
               SELECT @ptrval = TEXTPTR(字段名) 
               from 表名
               where 条件
               UPDATETEXT 表名.字段名 @ptrval @pos @len @str
               set @count=@count+1
            end
           ELSE
             break;
        END    select @count
    2.alter column语句有局限性,比如不允许修改text、image、ntext 或 timestamp 列.
    以下提供一个修改ntext列的例子:
         Alter Table tbl Add newcol ntext null
         go
         update tbl set newcol=col
         go
         EXEC sp_rename 'tbl.col', 'oldcol', 'COLUMN'
         go
         EXEC sp_rename 'tbl.newcol', 'col', 'COLUMN'
         go
         alter table tbl drop column oldcol
         go
    以上通过新增一列替换旧的列方法实现了将一个不允许为空的ntext修改为允许为空的ntext列(注意:以上的go不能缺少).修改表结构之后,由于视图所依赖的基础对象的更改,视图的持久元数据会过期,需要刷新视图,通过sp_refreshview (可以通过sp_depends 找处相关的视图,再通过sp_refreshview逐个刷新).
    另外可以也可以通过一下存储过程进行刷新所有视图:
        PRINT 'Refreshing all views...'    DECLARE @vName sysname    DECLARE refresh_cursor CURSOR FOR 
         SELECT Name from sysobjects WHERE xtype = 'V'
         order by crdate
        FOR READ ONLY  
        OPEN refresh_cursor    FETCH NEXT FROM refresh_cursor 
        INTO @vName
         WHILE @@FETCH_STATUS <> -1
         BEGIN
             exec sp_refreshview @vName
             PRINT '视图' + @vName + ' refreshed'
            FETCH NEXT FROM refresh_cursor 
            INTO @vName
         END
        CLOSE refresh_cursor
        DEALLOCATE refresh_cursor
     
      

  2.   

    有没有更简单点的办法啊,这个看起来就晕头。heihei
      

  3.   

    DECLARE @ptrval varbinary(16);
    SELECT @ptrval = TEXTPTR(calcul) 
       FROM CALCS_ACTIONS 
    where 条件  --此处一定要找到一个唯一的条件,因为不能向多个ntext单元中添加内容
    UPDATETEXT CALCS_ACTIONS.calcul @ptrval NULL 0
    ':DECLARE temp; :IF LimsTypeEX(C)="STRING" .OR. LimsTypeEX(V0)="STRING" .OR. LimsTypeEX(V)="STRING".OR. LimsTypeEX(V1)="STRING"  ; 
            UsrMes("错误", "该项目需要计算参数。计算参数没有输入"); 
            temp:=0; 
    :ELSE; 
            temp:=((V1-V0)*C*100.09*1000)/V; 
    :ENDIF; 
    :RETURN temp; '
      

  4.   

    text先得到内容地址指针,或者说句柄,再用 writetext 或 updatetext 来处理,用起来也简单,自己看看联机丛书就知道了。想要简单的方法,估计没有,sql2k对text支持的不够好。