create procedure  st_CrossTableByRingSame
   @Row varchar(50),
   @Col Varchar(50),
   @OrderBy  varchar(50),  /*用于列排序*/
   @Sum Varchar(100),
   @SQL_Condition  Varchar(8000)
   with ENCRYPTION
as
   
   declare @Productno varchar(100)
   --declare @qty  float
   declare @qty  decimal(18,2)
   declare @s  varchar(2000)
   declare @s_sum  varchar(200)
   declare @i int
   declare @SQL1  varchar(5000)
   declare @SQL2  varchar(5000)
   declare @SQL3  varchar(5000)     set @SQL1='select '+@row+ ' as srow,'+@col+' as scol ,'+'SUM('+@sum+') AS Qty ,'+@OrderBy+' as serial '+ @SQL_Condition 
   select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
   into #tmp 
   from tbDivision
   where 0=1
 
--   if  @OrderBy <>''
   set @sql3=' insert into #tmp  select distinct scol,serial  from ('+@SQL1+' ) as pp order by Serial'
--   else
--   set @sql3=' insert into #tmp  select distinct scol  from ('+@SQL1+' ) as pp'   print @sql3 
   exec (@sql3)
   --print '@sql3ok'   set @i=0
   set @s_sum=''
   DECLARE MyCursor CURSOR FOR
   select scol from #tmp
   OPEN MyCursor
   FETCH NEXT FROM MyCursor
   INTO  @Productno   WHILE @@FETCH_STATUS = 0
     BEGIN
       set @i=@i+1
       if @i=1
        begin  
--           set @s=' sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+convert(varchar(2),@i)
           set @s=' sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+@productno
           set @s_sum='P1.Q'+@productno
        end
       else
        begin
           set @s=@s+' ,sum(case p.scol when '''+@productno+''' then p.Qty else 0 end) as '+'Q'+@productno
           set @s_sum=@s_sum+'+P1.Q'+@productno
        end 
      FETCH NEXT FROM MyCursor INTO  @Productno
     END
   CLOSE MyCursor
   DEALLOCATE MyCursor   --print 'OK'
   set @SQL2=(' SELECT P1.*, '+@s_sum+' AS YearTotal'+
              ' into #tempsum FROM (SELECT P.srow,'+@s+
              ' FROM ('+ @SQL1+') AS P'+
              ' GROUP BY P.srow) AS P1 order by p1.srow ')    --print @SQL2   exec (@SQL2 +
         ' select * from #tempsum'+
--         ' select convert(varchar(5),DL.DayTimeValue,108)as CollectionTime,B.* from tbDayMinuteList  DL left join  #tempsum  b on b.SRow=convert(varchar(5),DL.DayTimeValue,108) order by DL.DayTimeValue '+
         ' drop table #tempsum' )

解决方案 »

  1.   

    建议楼主先自己参考MYSQL手册中的存储过程语法和例子改一下,
    如果自己改的代码仍有问题,则把你的代码和系统提示的错误信息一同贴出,然后大家可以帮你分析学习。
      

  2.   

    这个,基本上,重写。这就是异构数据库麻烦的地方。有个工具叫做msql2mysql,你可以试试。
      

  3.   

    你的mysql里面自带了,linux下肯定有,手头暂时没windows版mysql,不确定windows是否有
      

  4.   


    这个存储过程已经改了大部分,不过中间有一段 select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
       into #tmp 
       from tbDivision
       where 0=1   ,这个怎么改??
      

  5.   


    CREATE  TEMPORARY TABLE temp (scol varchar(200),serial varchar(100));