日期:2014-05-18  浏览次数:20470 次

存储过程(05)里面用到varchar(max),现在要转移到2000,怎么办?
RT;

------解决方案--------------------
varchar(8000)

注意拼接的长度,超过8000了多定义几个,加一起处理。
------解决方案--------------------
SQL code
 varchar(8000)

------解决方案--------------------
就是多用几个字符去拼接!!
探讨
引用:
varchar(8000)

注意拼接的长度,超过8000了多定义几个,加一起处理。


具体怎么操作?

------解决方案--------------------
根据以下3点:
@_keyword nvarchar(100),--拆分的字符
@retid nvarchar(10),--主键
'@id=@id+convert(nvarchar,'+@retid+')'

可以知道@id的最大长度 = 30*1000 = 3000

4000足够有余,你说不够,不知道什么意思。

------解决方案--------------------
是 30*100

最多100个id
------解决方案--------------------
这个存储过程的功能可不可以在程序里实现,假如符合条件的记录有几千万条怎么处理。。。
------解决方案--------------------
我短路了,不能这样推的。

你要返回id集合超过8000字节,2000没有适合的数据类型给你返回,只能以以表结果形式返回。

1、text/ntext,返回单行
2、varchar(8000)/nvarchar(4000),返回N行。

------解决方案--------------------
-- 循环前建表
create table #rs (id int identity, ids varchar(8000))

-- 循环内判断@id长度,超过某个阀值插入#rs,重置@id
if datalength(@id)>7500
begin
insert #rs select substring(@id,1,len(@id)-1)
set @id = ''
end


-- 循环后处理
if @id<>''
begin
insert #rs select substring(@id,1,len(@id)-1)
end

-- 最后返回
select * from #rs

------解决方案--------------------
探讨

引用:
如果一个key的id集合就超过了8000字节,SQL2000基本上属于不可能完成的任务。

对单个key都要用游标处理,同样的阀值判断,不断插入#rs,性能如何就不得而知了。


被你言中了,一次性,我读出的数据,就超过8000字节了,咋办??

------解决方案--------------------
VARCHAR(MAX)对应TEXT类型
------解决方案--------------------
前台一定要 1,2,3,4,... 这种形式么?个人觉得按照表来处理应该效率好点,并且方便。