2017-10-28 117 views
0

我想写一个SQL存储过程使用If/Else,从IncPercent作为整数作为参数,如果IncPercent在10以下即以百分比的形式添加到OrderDetails表上的值列中。否则,如果它是10或以上,它只会将OrderDetails表上的值列增加10%。如果/ ELse在SQL使用参数来区分要添加到值的百分比列

Create Procedure spAddPercentage 
    (
    @IncPercent int 
    ) 
    AS 
    BEGIN 
    IF @IncPercent < 10 SELECT Value From OrderDetails 
    UPDATE OrderDetails 
    THEN Value * @IncPercent/100 + Value 
    END IF 
    ELSE @IncPercent > 10 SELECT Value FROM OrderDetails 
    UPDATE OrderDetails 
    THEN Value * 1.1 
    END 

UPDATE:这是我使用的代码工作

 Create Procedure spAddPercentage 
     (
     @IncPercent int 
    ) 
     AS 
     BEGIN 
     IF @IncPercent < 10 
     BEGIN 
     UPDATE OrderDetails 
     SET Value = Value * (1 + @IncPercent/100.0) 
     END 
     ELSE 
     UPDATE OrderDetails 
     SET Value = Value * 1.1 
     END 
+2

像存储过程这样的程序代码是**高度特定于供应商的** - 所以请添加一个标签以指定您使用的是mysql,postgresql,sql-server,oracle或'db2' - 或者其他的东西。 –

+0

sql-server 2012 – Richoz

回答

1

你为什么要编写存储过程,如果你不知道一个update的基本语法?我期望这样的事情:

UPDATE OrderDetails 
    SET Value = (CASE WHEN @IncPercent <= 10 
         THEN Value * (1 + @IncPercent/100.0) 
         ELSE Value * 1.1 
       END); 

您的语法看起来最接近SQL Server,所以我假设这是数据库。该代码在其他数据库中看起来非常相似。

下面是一些与你的代码中的问题:

  • UPDATE以表名,而不是列名。
  • SQL Server做整数除法,所以1/100 = 0,不是0.01。
  • SUM()用于聚合,不用于在同一行中添加数字。
  • SQL Server没有END IF。没有我熟悉的语言有END ELSE
  • 不要使用“sp”启动存储过程定义。它太接近“sp_”,这意味着SQL Server中有一些特殊的东西(here是一个很好的解释)。
+0

谢谢,但是IF ELSE语句是什么,我正在尝试学习。从来没有用过CASE,因为我只是一名学生。 – Richoz

+0

@Richoz。 。 。学习'CASE'。这是ANSI标准SQL,并且是回答此问题的更好方法。当它是适当的方法使用时,你应该使用'IF',而这个更新并不是这种情况。 –

+0

谢谢我使用你的答案,并将其修改为if else语句,并且它工作正常 – Richoz