2016-03-30 11 views
0

を取得しなければならないところ、私はこれは私がこれの結果はSQL:私は私のコードで間違って何4.

Lastname Firstname Dateofhire Salary  Bonus 
Bernstein Michael 1991-05-25 98000.00 19600.00 
ある

CREATE PROCEDURE Sp_bonus @bonus  INT, 
          @lastname VARCHAR(50) out, 
          @firstname VARCHAR(50) out, 
          @dateofhire DATE out, 
          @salary  SMALLMONEY out, 
          @bonusmoney SMALLMONEY out 
AS 
    IF @bonus = 20 
     BEGIN 
      SELECT @lastname = lastname, 
       @firstname = firstname, 
       @dateofhire = dateofhire, 
       @salary = salary, 
       @bonusmoney = (salary * (@bonus) * 0.01) 
      FROM salesreps 
      WHERE dateofhire < '12/31/2000' 
     END 

    IF @bonus = 5 
     BEGIN 
      SELECT @lastname = lastname, 
       @firstname = firstname, 
       @dateofhire = dateofhire, 
       @salary = salary, 
       @bonusmoney = (salary * (@bonus) * 0.01) 
      FROM salesreps 
      WHERE dateofhire >= '12/31/2000' 
     END 

    DECLARE @lastname VARCHAR(50), 
      @firstname VARCHAR(50), 
      @dateofhire DATE, 
      @salary  SMALLMONEY, 
      @bonusmoney SMALLMONEY 

    EXEC Sp_bonus 
     @bonus=20, 
     @[email protected] out, 
     @[email protected] out, 
     @[email protected] out, 
     @[email protected] out, 
     @[email protected] out 

    SELECT [email protected], 
      [email protected], 
      [email protected], 
      [email protected], 
      [email protected] 

を使用していたコードで出力として1行しか取得しています

ここには3つのレコードがあります。私はコード内で何が間違っているのか理解していないのは、私に1つの出力行しか与えていないということです。私はどこのロジックが正しいかをチェックし、ボーナスの計算も正しいとしています。

唯一の問題

は、私はボーナス= 20またはボーナス= 5

任意の提案を使用するかどうか、それは私に、出力の一行のみを示すことです。

+1

私が見る最初の問題は、実際にコードの書式設定を使用できることです。第2の問題は大きな問題です。あなた自身の内部でプロシージャを実行していることです。 ISO yyyy-mm-dd形式の代わりにカルチャ固有の日付形式を使用しています。最後に、sp_接頭辞を使用しています。これはMSがシステム・プロシージャのために予約しているので避けてください。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

+0

私はhttp://www.dpriver.com/pp/sqlformat.htmであなたのコードをフォーマットしようとしていますが、あなたは1つの 'そこに –

答えて

1

戻り値はベクトルではなくスカラーです。

テーブルとスカラー値を返す場合は、

CREATE PROCEDURE proc_name 
       @param int out 
AS 
BEGIN 
    SET @param = value 

    SELECT ... FROM [Table] WHERE Condition 
END 
GO 
+0

あなたが言っていたが理解して最終的に理解するためにいつか私を取った。ありがとう –

関連する問題