目前要把sql server的数据导入到mysql 发现sql server的存储过程啦函数不能导的,语法有出入。要自己重新编写这些过程和函数了。如现在有个sql server 存储过程(就简单的确认用户重复),
ALTER PROCEDURE [dbo].[pro_check_member_reg]
@strName varchar(16), -- 用户名
@Flag int output -- 返回值
AS
BEGIN
SET NOCOUNT ON;    IF EXISTS(SELECT 1 FROM t_member_basic(NOLOCk) WHERE user_name=@strName)
BEGIN
SET @Flag=-1002 -- 此帐号名已被注册,请换另一帐号名字尝试再次注册
RETURN
END
END查看些资料,第一次写mysql的过程。CREATE pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
BEGIN
DECLARE u_num INT;
SELECT COUNT(*) INTO u_num FROM t_member_basic WHERE t_member_basic.user_name=in_strName;
IF u_num<>0 THENSELECT -1002 into out_Flag; -- 此帐号名已被注册,请换另一帐号名字尝试再次注册END IF;END提示错误:1064~~
各位mysql的前辈,求指导
或者有没有什么办法,把mysql 的存储过程一次转变为mysql的过程。MySQLSQL Server存储

解决方案 »

  1.   

    CREATE pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
    BEGIN
    DECLARE u_num INT;
    SELECT COUNT(*) INTO u_num FROM t_member_basic WHERE t_member_basic.user_name=in_strName;
    IF u_num!=0 THEN
    SELECT -1002 into out_Flag; -- 此帐号名已被注册,请换另一帐号名字尝试再次注册
    END IF;
    END
    另外提问时建议把完整的错误信息复制出来,一般来说错误提示中会有详细的提示。
      

  2.   

    [SQL] CREATE pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
    BEGIN
    DECLARE u_num INT;
    [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
    BEGIN
    DECLAR' at line 1
    错误信息
      

  3.   

    delimiter $$
    CREATE pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
     BEGIN
     DECLARE u_num INT;
     SELECT COUNT(*) INTO u_num FROM t_member_basic WHERE t_member_basic.user_name=in_strName;
     IF u_num<>=0 THEN
     SELECT -1002 into out_Flag; -- 此帐号名已被注册,请换另一帐号名字尝试再次注册
     END IF;
     END$$
    delimiter ;
      

  4.   

    囧了忘了写上PROCEDURE 对象了。。
      

  5.   

    CREATE 后面忘了加对象了。
      

  6.   

    delimiter $$
     CREATE procedure pro_check_member_reg(in in_strName varchar(16),out out_Flag INT )
      BEGIN
      DECLARE u_num INT;
      SELECT COUNT(*) INTO u_num FROM t_member_basic WHERE t_member_basic.user_name=in_strName;
      IF u_num<>=0 THEN
      SELECT -1002 into out_Flag; -- 此帐号名已被注册,请换另一帐号名字尝试再次注册
      END IF;
      END$$
     delimiter ;
      

  7.   

    弱弱问一下。版主大人,
    如果是函数的话,想返回一个结果集,table类,你那边有没有这个返回table结果集的实例吗?
      

  8.   

    mysql UDF不能返回记录集,将结果保存到表中,再访问
      

  9.   

    MYSQL目前的版本还不支持返回结果集。 一般是通过临时表。
      

  10.   

    那个,,,,容我抱抱版主的大腿。
    现在想测试这个过程了。
     CALL pro_check_member_reg('wucj2008me');错误提示:
    [SQL]  CALL pro_check_member_reg('wucj2008me');
    [Err] 1318 - Incorrect number of arguments for PROCEDURE jfgame.pro_check_member_reg; expected 2, got 1
    参数不对。out也要加上去。
     再来一次:
     CALL pro_check_member_reg('wucj2008me',0);
    错误提示:
    [SQL]  CALL pro_check_member_reg('wucj2008me',0);
    [Err] 1414 - OUT or INOUT argument 2 for routine jfgame.pro_check_member_reg is not a variable or NEW pseudo-variable in BEFORE trigger
    help~~~~~
      

  11.   

    CALL pro_check_member_reg('wucj2008me',@a);
    select @a;
      

  12.   

    搞定,总算从创建到运行过一次了。
    谢谢版主的帮助。那个,不知道版主大人那边有没有mysql 的中文使用手册。有的话,能发我一份不,发现网上的mysql中文使用手册都是要积分什么的下载的。
      

  13.   

    http://dev.mysql.com/doc/
    自己下吧