谁能帮我把下面的存储过程改成mysql的啊,现在是sqlserver的

perfectProgramming 2017-07-17 02:09:31
create proc proc_checkTimer__dataUpdateTime(@startIndex INT, @endIndex INT)
as
DECLARE @tbm_id int --table_meta表主键
DECLARE @varId int --品种id
DECLARE @dbname varchar(300) --表名
DECLARE @dataUpdateTime datetime --物理表最近更新时间
DECLARE @Update_Str nvarchar(1000) --更新数据的sql
DECLARE @EditTime datetime --逻辑表对应最大修改时间
DECLARE @Select_Str nvarchar(1000) --查询最大EditTime的sql

--定义游标 遍历table_meta表
DECLARE dbname_Cursor CURSOR LOCAL FOR
--筛选出更新时间大于上次定时任务执行时间的逻辑表
select id,varId,dbName,dataUpdateTime from CFG_TABLE_META_NEW where (dataupdateTime is NULL OR DATEDIFF(SECOND, dataupdateTime, dealtime) > 0)
AND (id BETWEEN @startIndex and @endIndex)
ORDER BY id
open dbname_Cursor
fetch next from dbname_Cursor into @tbm_id,@varId,@dbname,@dataUpdateTime
while @@fetch_status = 0
begin try
--通过dbname 和 varId查询物理表只定品种最大editTime 更新到cfg_table_meta_new表中
-- 获取返回值避免需执行更新语句时再次查询,写法1
--SET @Select_Str = 'SELECT @EditTime = max(editTime) from ' + @dbname + ' where varId = ' + convert(varchar(5),@varId)
--exec sp_executesql @Select_Str,N'@EditTime datetime out', @EditTime out -- 获取返回值避免需执行更新语句时再次查询
--写法2(注意表名只能字符串连接不可作为入参)
SET @Select_Str = 'SELECT @EditTime = max(editTime) from ' + @dbname + ' where varId = convert(varchar(5),@varId)'
exec sp_executesql @Select_Str,N'@EditTime datetime out, @varId int', @EditTime = @EditTime out, @varId = @varId
IF(@EditTime IS NULL)
BEGIN
PRINT('if edittime is null:-------------------------')
set @Update_Str = 'update cfg_table_meta_new set dataupdateTime = getdate() where [id] = ' + convert(varchar(10),@tbm_id)
EXEC(@Update_Str) --慎重打开
--PRINT @Update_Str
END
ELSE IF(@dataUpdateTime is NULL)
BEGIN
--PRINT('else if dataupdatetime is null:---------------------')
set @Update_Str = 'update cfg_table_meta_new set dataupdateTime = ''' + CONVERT(VARCHAR(24),@EditTime,120) + ''' where [id] = ' + convert(varchar(10),@tbm_id)
EXEC(@Update_Str) --慎重打开
--PRINT(@Update_Str)
END
ELSE IF(DATEDIFF(ss, @dataUpdateTime, @EditTime)> 0)
BEGIN
PRINT('else if:---------------------')
set @Update_Str = 'update cfg_table_meta_new set dataupdateTime = ''' + CONVERT(VARCHAR(24),@EditTime,120) + ''' where [id] = ' + convert(varchar(10),@tbm_id)
EXEC(@Update_Str) --慎重打开
--PRINT(@Update_Str)
END
ELSE
BEGIN
PRINT ('else:' + convert(varchar(10),@tbm_id) + '----------')
END
fetch next from dbname_Cursor into @tbm_id,@varId,@dbname,@dataUpdateTime
end try
begin catch
PRINT('exception:' + @dbname + '---' + convert(varchar(5),@varId))
PRINT(error_message())
fetch next from dbname_Cursor into @tbm_id,@varId,@dbname,@dataUpdateTime
end catch

close dbname_Cursor
deallocate dbname_Cursor
...全文
192 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

56,687

社区成员

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

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