如何把SQL2000存储过程改为Mysql支持的存储过程?

Diving 2011-05-07 09:02:27

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' )
...全文
90 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gisslee 的回复:]

引用 3 楼 zuoxingyu 的回复:
这个,基本上,重写。

这就是异构数据库麻烦的地方。

有个工具叫做msql2mysql,你可以试试。
这个工具哪有下载???百度谷歌都不见
[/Quote]
你的mysql里面自带了,linux下肯定有,手头暂时没windows版mysql,不确定windows是否有
Diving 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zuoxingyu 的回复:]
这个,基本上,重写。

这就是异构数据库麻烦的地方。

有个工具叫做msql2mysql,你可以试试。
[/Quote]这个工具哪有下载???百度谷歌都不见
ACMAIN_CHM 2011-05-09
  • 打赏
  • 举报
回复
[Quote]这个存储过程已经改了大部分,不过中间有一段 select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
into #tmp
from tbDivision
where 0=1 ,这个怎么改??[/Quote]

CREATE TEMPORARY TABLE temp (scol varchar(200),serial varchar(100));
Diving 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
建议楼主先自己参考MYSQL手册中的存储过程语法和例子改一下,
如果自己改的代码仍有问题,则把你的代码和系统提示的错误信息一同贴出,然后大家可以帮你分析学习。
[/Quote]

这个存储过程已经改了大部分,不过中间有一段 select convert(varchar(200),123) as scol ,convert(varchar(100),123) as serial
into #tmp
from tbDivision
where 0=1 ,这个怎么改??
zuoxingyu 2011-05-08
  • 打赏
  • 举报
回复
这个,基本上,重写。

这就是异构数据库麻烦的地方。

有个工具叫做msql2mysql,你可以试试。
Diving 2011-05-08
  • 打赏
  • 举报
回复
好的,谢谢大家了。
rucypli 2011-05-07
  • 打赏
  • 举报
回复
这。。 你还是自己动手吧 以后也不求人
ACMAIN_CHM 2011-05-07
  • 打赏
  • 举报
回复
建议楼主先自己参考MYSQL手册中的存储过程语法和例子改一下,
如果自己改的代码仍有问题,则把你的代码和系统提示的错误信息一同贴出,然后大家可以帮你分析学习。

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧