原贴内容: 改为NTEXT我取字段长度, SELECT datalength(content) from report where id=4datalength 为什么会在于字节数,如何取 字段字符数,以便进行分页. 谢谢大家了, 准备结贴
使用 text 或 image 数据类型时,ReadText函数的参数是根据数据的字节数来取,所以会有半个中文的问题!但是使用 ntext 数据类型时,ReadText函数的参数是根据数据的字符数来取数据,所以就不会出现你说的问题!
这个是字符数和字节数的区别例子select len('我爱中国') 字符数,datalength('我爱中国') 字节数 select len('I love China') 字符数,datalength('I love China') 字节数
用SUBSTRING函数,也不用判断有多长。 比如一页4000字符。 取第三页SELECT SUBSTRING(content,4*4000+1,4000) from report where id=4 如果结果=''则文章结束了。
比如一页4000字符。 取第三页 declare @i int set @i=3 SELECT SUBSTRING(content,(@i-1)*4000+1,4000) from report where id=4
用 SUBSTRING 确实不错,但是 我确无法知道总页数, 有什么方法可以整个字段全部取出来吗?
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)<>''
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)<>''
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
取字符个数,用什么?
改为NTEXT我取字段长度, SELECT datalength(content) from report where id=4datalength 为什么会在于字节数,如何取 字段字符数,以便进行分页. 谢谢大家了, 准备结贴
select len('I love China') 字符数,datalength('I love China') 字节数
比如一页4000字符。
取第三页SELECT SUBSTRING(content,4*4000+1,4000) from report where id=4
如果结果=''则文章结束了。
取第三页
declare @i int
set @i=3
SELECT SUBSTRING(content,(@i-1)*4000+1,4000) from report where id=4
你建一个数字表
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)<>''
from YourTable,NumTb
where id=4
and substring(NtextField,(N-1)*4000+1,4000)<>''
我的字段改为: 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