在语法上MySQL和slqserver 还是有很大区别。

 

下面我们来看一下mysql 和SQLServer在 动态sql ,游标,作业方面的一些差异。

 

===============动态sql===============

 

在SQLServer中 动态sql 是使用关键字 execute 或是 sp_executesql 执行的 

但在MySQL 中就不是了,下面我们看一下在MySQL中是执行动态sql的 

 

set @queryTest='select * from test';

prepare stmt from @queryTest;

execute stmt ;

deallocate prepare smtm ;

 

===========mysql 中的游标

在mysql 和SQLServer 中游标也需要执行5个步骤,

但是还是有区别的。

1.声明游标

2.声明游标退出变量

3.打开游标

4.遍历游标

5.关闭游标

 

下面是一个具体的实例:

值得注意的,MySQL中没有块这个概念,也就是说 不能把游标,循环,判断之类的语句单独执行

,必须在一个对各对象中,例如:sp,或是函数,

 

delimiter $$

 

create procedure sp_curosr()

begin

 

declare cur cursor for select id from test where id <100;  --   声明游标

declare continue handler for not found set done=1  -- 定义遍历结束变量

declare nid int;   

 

open cur ;  打开游标

 

fetch cur into nid  ;   --   读取游标

while done=0 do 

 

delete from test where id =nid ;

 

fetch cur into nid ;

 

end while ;

 

close cur;  -- 关闭游标

 

end ;

 

$$ delimiter ;

 

以上就是MySQL的游标语法。

 

需要注意的几点:

1.MySQL中使用declare 声明的标量必须在对象体的最上面。

2.上面的第二步可以使用下面语句替代

 declare continue handler for sqlstate '02000' set done=1 

 大致意思就是,当fetch 读取不到数据的时候 将done设置为1  ,