首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程(05)里面用到varchar(max),现在要转移到2000,怎么处理

2012-04-02 
存储过程(05)里面用到varchar(max),现在要转移到2000,怎么办?RT;[解决办法]varchar(8000)注意拼接的长度,

存储过程(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,... 这种形式么?个人觉得按照表来处理应该效率好点,并且方便。

热点排行