谁帮我改一下这存储过程 100分

来源:百度知道 编辑:UC知道 时间:2024/05/16 02:11:52
ALTER PROCEDURE proGet系数情况
AS
SET NOCOUNT ON
declare @sql varchar(8000)
set @sql = 'select a.规格'
select @sql =@sql+ ',isnull(sum(case when b.工序id=' + cast(c.id as varchar) + ' then 系数 end),null) [' + c.工序 + ']'
from (select id,工序 from 工序表 ) as c

select @sql = @sql+' from 规格表 a
left join 记工系数表 b on a.id=b.规格id
group by a.id,a.规格'
exec(@sql)
RETURN

开发一个别人弄的数据库,以前用的好好的,现在运行,这存储过程出问题了,原因是varchar只支持8000个字符,若表中东西少的话,可以运行成功,但随着时间的增长,这已不适合,听别人说,用临时表可以实现 ,希望哪位高手帮我写一个时时表.谢谢了.用其它方法解决问题也可.用的是SQL 2000的数据库
cigaretteblack 的答案我试了,不行的.在工序表中删除几行数据就可以.

1楼的,你可不可以帮我改成你那种形式呢.

---------试一下--
ALTER PROCEDURE proGet系数情况
AS
SET NOCOUNT ON
declare @sql varchar(8000)
set @sql = 'select a.规格'
select @sql =@sql+ ',isnull(sum(case when b.工序id= cast(c.id as varchar) then 系数 end),null),[ c.工序 ] from (select id,工序 from 工序表 ) as c '
select @sql = @sql+' from 规格表 a '+'left join 记工系数表 b on a.id=b.规格id '+'group by a.id,a.规格'
--print @sql
exec(@sql)
RETURN
SET NOCOUNT OFF
go

-----------

看你给出的存储过程怎么算字数也不会超8000,除非你存储过程还有其它参数传入.做交叉表之类的.

----------再试一下
ALTER PROCEDURE proGet系数情况
AS
SET NOCOUNT ON
declare @sql varchar(8000)
set @sql = 'select a.规格'
select @sql =@sql+ ',isnull(sum(case when b.工序id=''' + cast(c.id as varchar) + ''' then 系数 end),null), [''' + c.工序 + ''']'
from (select id,工序 from 工序表 ) as c

select @sql = @