如果report.content 是ntext,READTEXT读取的是字符数,就不会有这个问题。

解决方案 »

  1.   

    如果report.content 是ntext,
    取字符个数,用什么?
      

  2.   

    原贴内容:
    改为NTEXT我取字段长度, SELECT datalength(content) from report where id=4datalength 为什么会在于字节数,如何取 字段字符数,以便进行分页. 谢谢大家了, 准备结贴
      

  3.   

    使用 text 或 image 数据类型时,ReadText函数的参数是根据数据的字节数来取,所以会有半个中文的问题!但是使用 ntext 数据类型时,ReadText函数的参数是根据数据的字符数来取数据,所以就不会出现你说的问题!
      

  4.   

    这个是字符数和字节数的区别例子select len('我爱中国') 字符数,datalength('我爱中国') 字节数
    select len('I love China') 字符数,datalength('I love China') 字节数
      

  5.   

    用SUBSTRING函数,也不用判断有多长。
    比如一页4000字符。
    取第三页SELECT SUBSTRING(content,4*4000+1,4000) from report where id=4
    如果结果=''则文章结束了。
      

  6.   

    比如一页4000字符。
    取第三页
    declare @i int
    set @i=3
    SELECT SUBSTRING(content,(@i-1)*4000+1,4000) from report where id=4
      

  7.   

    用 SUBSTRING 确实不错,但是 我确无法知道总页数,  有什么方法可以整个字段全部取出来吗?
      

  8.   

    DATALENGTH不行吗?应该可以的。这样吧。
    你建一个数字表
    select top 8000 identity(int,1,1) as N into NumTb from sysobjects A,sysobjects B
    然后(假设一页4000字)
    找出所有页:
    select substring(NtextField,(N-1)*4000+1,4000) 
    from YourTable,NumTb 
    where id=4 
    and substring(NtextField,(N-1)*4000+1,4000)<>''取页数:
    select max(N) 
    from YourTable,NumTb 
    where id=4 
    and substring(NtextField,(N-1)*4000+1,4000)<>''
      

  9.   

    select substring(NtextField,(N-1)*4000+1,4000) as 内容,N as 页
    from YourTable,NumTb 
    where id=4 
    and substring(NtextField,(N-1)*4000+1,4000)<>''
      

  10.   

    TO  j9988(j9988) :
      我的字段改为: ntext ,为什么我的  write 又能用了, 请问你更新 数据库用的是什么?
    谢谢了!CREATE PROCEDURE  report_write @report_id int,@ptrval1 text 
    AS 
    declare @ptrval varbinary(16) 
    SELECT @ptrval = TEXTPTR(content) from report where id=@report_id
    writetext report.content @ptrval @ptrval1