CREATE PROCEDURE [dbo].[DreamVox_AddCallDirect]
@CALL_DIRECT int,
@CALL_DIRECT_DESC varchar(50)
 AS
if(exists(select * from CallDirect where  CALL_DIRECT=@CALL_DIRECT or  CALL_DIRECT_DESC=@CALL_DIRECT_DESC))
begin
return 1
end
else
begin insert into CallDirect(CALL_DIRECT,CALL_DIRECT_DESC)
values(@CALL_DIRECT,@CALL_DIRECT_DESC)
end
GO
上面的是sql server的存储过程,怎样将它转到mysql里啊?
我试了,if()里的函数有语法问题?不知道该怎么处理!

解决方案 »

  1.   

    声明是不一样的,create procedure 存储过程名(参数);
    ------------
    @CALL_DIRECT   int, 
    @CALL_DIRECT_DESC   varchar(50) 这些东西写在参数里的,(IN CALL_DIRECT INTEGER(11), IN CALL_DIRECT_DESC VARCHAR(50))
    ----------
    if语句应该没问题的,使用参数不用加@的,在mysql里
      

  2.   

    还有return不知道能不能用,我从没用过return的。
      

  3.   

    还有存储过程用begin end包着,go是不需要的。
      

  4.   


    CREATE PROCEDURE `ccdb`.`DreamVox_AddCallDirect` (IN p_CALL_DIRECT INTEGER(11),IN p_CALL_DIRECT_DESC VARCHAR(50))if (not exists(select * from CallDirect where  CALL_DIRECT=p_CALL_DIRECT or  CALL_DIRECT_DESC=p_CALL_DIRECT_DESC)) then insert into CallDirect(CALL_DIRECT,CALL_DIRECT_DESC) values(p_CALL_DIRECT,p_CALL_DIRECT_DESC)end if
    如果不需要return的话改成上面的,帮我看看还有错误吗?
    谢谢
      

  5.   

    `ccdb`.`DreamVox_AddCallDirect` 名称好像没有这个写法的。CREATE DEFINER = 'root'@'202.112.0.0/255.255.0.0' PROCEDURE 名称(参数);这样指定用户和此用户的IP段的。其他应该没问题。if里面那句insert最后要加个分号吧?这个区有个高手很熟存储过程的,不行的话你等他答你,不过今天有人老翻旧帖上来,你小心帖子沉了。
      

  6.   

    `ccdb`.`DreamVox_AddCallDirect`   这个写法是我用的可视化软件自动生成的.
      

  7.   


    delimiter ||
    CREATE   PROCEDURE `DreamVox_AddCallDirect`
    (
    INT F_CALL_DIRECT   int, IN F_CALL_DIRECT_DESC varchar(50)
    )
    begin
      declare cnt int default 0;
      select count(*) from CallDirect where CALL_DIRECT = F_CALL_DIRECT or CALL_DIRECT_DESC = F_CALL_DIRECT_DESC into cnt;
      if cnt > 0 then
        select 1;
      else
        insert   into   CallDirect(CALL_DIRECT,CALL_DIRECT_DESC) 
        values(@CALL_DIRECT,@CALL_DIRECT_DESC) 
      end if;
    end||
    delimiter ;
      

  8.   

    本帖最后由 yueliangdao0608 于 2008-01-14 20:57:25 编辑