写了一个存储过程,将输入的数据保存到一张表中(本来是张空表),用ISNUMERIC判断(暂不纠结PARTINDEX函数),分别判断2个输入的数据,第一个数值写进了空表,但是第二个写不进去,帮忙看下 是IF ELSE 的问题 还是UPDATE的问题SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER PROC [dbo].[infotrans]
        @cp VARCHAR(20), 
        @cd VARCHAR(20)
     
   
AS 
BEGINIF  1=ISNUMERIC(@cp)
INSERT INTO temp1(cperson_id) VALUES(@cp)
ELSE
PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cp)
RETURNIF  1=ISNUMERIC(@cd)
UPDATE temp1 SET cdept_id=@cd      WHERE cperson_id=@cp
ELSE
PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cd)
RETURNEND

解决方案 »

  1.   

    不要随便写 Return , return 代表结束。
      

  2.   

    ALTER PROC [dbo].[infotrans]
            @cp VARCHAR(20), 
            @cd VARCHAR(20)
    AS 
    BEGIN
    --1.
    IF  1=ISNUMERIC(@cp)
    INSERT INTO temp1(cperson_id) VALUES(@cp)
    ELSE
    PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cp)
    --2.  
    IF  1=ISNUMERIC(@cd)
    UPDATE temp1 SET cdept_id=@cd      WHERE cperson_id=@cp
    ELSE
    PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cd)
    END
    GO
      

  3.   

    一旦执行了Return,就终止执行并退出存储过程了。
      

  4.   

    楼主家return是想干什么?
      

  5.   

    刚学MSSQL 半个月   随便写了个   错误挺低级
      

  6.   

    有点自以为是,程序执行到了 ELSE    return就是 输入不正确 然后弹出  如果不执行else return 就是个摆设 
      

  7.   

    有点自以为是,程序执行到了 ELSE    return就是 输入不正确 然后弹出  如果不执行else return 就是个摆设 没事了就结贴吧
      

  8.   

    有点自以为是,程序执行到了 ELSE    return就是 输入不正确 然后弹出  如果不执行else return 就是个摆设 没事了就结贴吧
    谢谢帮助  以后再也不乱用returun了
      

  9.   

    去掉return
      

  10.   


    --楼主啊,你想如果不是数字就返回,不在继续执行,你得家begin  end,酱紫嘛
    IF  1=ISNUMERIC(@cp)
    INSERT INTO temp1(cperson_id) VALUES(@cp)
    ELSE
    begin
        PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cp)
        RETURN
    end
     
    IF  1=ISNUMERIC(@cd)
    UPDATE temp1 SET cdept_id=@cd      WHERE cperson_id=@cp
    ELSE
    Begin
        PRINT 'invalid input value:'+CONVERT(VARCHAR(20),@cd)
        RETURN
    End