2017-10-28 8 views
0

If/Elseを使用してIntegerをパラメータとしてIncPercentから取得し、IncPercentが10未満の場合はSQLストアドプロシージャを作成しようとしていますこれをOrderDetailsテーブルのvalue列に追加する割合として指定します。 ELSE 10以上の場合は、OrderDetails表の値列に10パーセントしか追加しません。/ELSE If 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:これは私がそれを使用したコードは、あなたも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 OrderDetails 
    SET Value = (CASE WHEN @IncPercent <= 10 
         THEN Value * (1 + @IncPercent/100.0) 
         ELSE Value * 1.1 
       END); 

あなたの構文はSQL Serverに最も近いと思われるので、私はそれがデータベースであると仮定しています。このコードは、他のデータベースでも非常によく似ています。

  • UPDATEはテーブル名ではなく、列名を取ります。

    はここにあなたのコードで問題の一部です。

  • SQL Serverでは整数の除算が行われるため、0.01ではなく1/100 = 0となります。
  • SUM()は、同じ行の数字を追加するためではなく、集計に使用されます。
  • SQL ServerにはEND IFがありません。私がよく知っている言語はEND ELSEです。
  • "sp"でストアドプロシージャ定義を開始しないでください。これは "sp_"には近すぎるため、SQL Serverで特別な意味があります(hereが良い説明です)。
+0

ありがとうございますが、IF ELSEステートメントについては、これが私が習得しようとしているものです。私は唯一の学生であるので、私の学習ではまだケースを使用したことはありません。 – Richoz

+0

@リコーズ。 。 。 'CASE'を学ぶ。 ANSI標準のSQLであり、この質問に答えるより良い方法です。使用するのが適切な方法である場合は、 'IF'を使用してください。これはこのアップデートでは当てはまりません。 –

+0

ありがとう私はあなたの答えを使用し、それをif else文に変更し、それがうまくいった – Richoz

関連する問題