/****** 对象: 存储过程 dbo.ApplyGaoZhao    脚本日期: 2003-9-1 10:38:41 ******/  
--申请推荐高招  
CREATE PROCEDURE ApplyGaoZhao  
(  
     @gaozhaoid INT,  
     @userid INT,  
     @result INT OUTPUT  
)  
AS  
DECLARE  @Total  INT  
DECLARE  @gold  INT  
SELECT  
@Total=COUNT(*)  
FROM  
GaoZhaoInfo  
WHERE  
DATEDIFF(SECOND,ApplyDate,GETDATE())<604800  
IF  @Total<30  
SELECT  
@gold=Gold  
FROM  
UserLogin  
WHERE  
UserId=@userid  
ELSE SELECT  
@result=-1  
IF @gold>=20  
EXECUTE  ApplyGaoZhao2  @gaozhaoid,@userid  
ELSE SELECT   
@result=-2  
IF @@ROWCOUNT >= 1  
SELECT  
@result=1  
ELSE SELECT  
@result=0  
GO请问我这个存储过程没有没有漏洞呢?
它总是不能实现我的要求
特别是这几个IF判断,不知道是不是这样子用
谢谢!

解决方案 »

  1.   

    功能应该可以的,结构不清晰,If语句内部最好用Begin,End
      

  2.   

    1.IF @Total>=30 AND @gold<20 ...,@result会赋两个不同的值;不提倡。
    2.@@ROWCOUNT的值由哪次执行影响的,是不确定的。
      

  3.   

    1.注意缩进
    2.最好加上 BEGIN END
      

  4.   

    --申请推荐高招
    CREATE PROCEDURE ApplyGaoZhao
    (
         @gaozhaoid INT,
         @userid INT,
         @result INT OUTPUT
    )
    AS
    DECLARE  @Total  INT
    DECLARE  @gold  INT
              SELECT
               @Total=COUNT(*)
              FROM
              GaoZhaoInfo
              WHERE
              DATEDIFF(SECOND,ApplyDate,GETDATE())<604800
    IF  @Total<30
             BEGIN
             SELECT
             @gold=Gold
              FROM
             UserLogin
             WHERE
             UserId=@userid
             ELSE SELECT
             @result=-1
             END
    IF @gold>=20
            BEGIN
            EXECUTE  ApplyGaoZhao2  @gaozhaoid,@userid
            ELSE SELECT 
            @result=-2
            END
    IF @@ROWCOUNT >= 1
            BEGIN
            SELECT
            @result=1
            ELSE SELECT
            @result=0
            END
    GO是这样子弄吗?
    但是我这样弄之后,总是报语法错误
    “在ELSE关键字周围有语法错误”
      

  5.   

    1.IF @Total>=30 AND @gold<20 ...,@result会赋两个不同的值;不提倡。
    2.@@ROWCOUNT的值由哪次执行影响的,是不确定的。有什么办法确定.@@ROWCOUNT的值吗??
      

  6.   

    你会给result赋值好两次如果total大于30 先是-1 然后-2
      

  7.   

    --申请推荐高招
    CREATE PROCEDURE ApplyGaoZhao
    (
         @gaozhaoid INT,
         @userid INT,
         @result INT OUTPUT
    )
    AS
    DECLARE  @Total  INT
    DECLARE  @gold  INT
              SELECT
               @Total=COUNT(*)
              FROM
              GaoZhaoInfo
              WHERE
              DATEDIFF(SECOND,ApplyDate,GETDATE())<604800
    IF  @Total<30
             BEGIN
             SELECT
             @gold=Gold
              FROM
             UserLogin
             WHERE
             UserId=@userid
      END
             ELSE SELECT
             @result=-1
    IF @gold>=20
            BEGIN
            EXECUTE  ApplyGaoZhao2  @gaozhaoid,@userid
      END
            ELSE SELECT 
            @result=-2GO
    我怎么才可以知道上面的所有的语句都已经执行了呢
    这个该怎么改好呢?
    IF @@ROWCOUNT >= 1
            BEGIN
            SELECT
            @result=1
      END
            ELSE SELECT
            @result=0
      

  8.   

    --申请推荐高招
    CREATE PROCEDURE ApplyGaoZhao
    (
         @gaozhaoid INT,
         @userid INT,
         @result INT OUTPUT
    )
    AS
    DECLARE  @Total  INT
    DECLARE  @gold  INT
              SELECT
               @Total=COUNT(*)
              FROM
              GaoZhaoInfo
              WHERE
              DATEDIFF(SECOND,ApplyDate,GETDATE())<604800
    IF  @Total<30
             BEGIN
             SELECT
             @gold=Gold
              FROM
             UserLogin
             WHERE
             UserId=@userid
                   IF @gold>=20
                           BEGIN
                           EXECUTE  ApplyGaoZhao2  @gaozhaoid,@userid
                           SELECT @result = 1
                   END
                            ELSE SELECT 
                             @result=-2
      END
             ELSE SELECT
             @result=-1
    GO感觉已经改的差不多了,请高手再帮我看看,谢谢·