2016-11-07 7 views
0

私はこのエラーが発生しており、何をすべきかわかりません。 また、パラメータ@empIdに基づいて現在の給与を戻す方法はありますか。例えば、私はdbo.getBonusのような関数を呼び出した場合、(3)それは返す必要があります。ここでは5600.000パラメータに基づく戻り値を持つUDFの作成

は、私は、クエリを実行したときに作成される表は次のとおりです。

EmpId Bonus 
3 5600.000 
4 18500.000 
5 15600.000 
6 7600.000 

エラーメッセージ:

メッセージレベル44、レベル16、状態2、プロシージャgetBonus、行188 関数内に含まれるSELECTステートメントは、クライアントにデータを返すことはできません。

ありがとうございました。

CREATE FUNCTION dbo.getBonus(@empId INT) 
RETURNS numeric(10,2) 
AS 
BEGIN 
SELECT C.[Emp Id], 
    (Salary.Emp_Salary * .1) AS 'Bonus' 
     FROM 
     (
     SELECT 
      e.Emp_Id AS "Emp Id", 
      MAX(Emp_Salary_Change_Year) AS "Change Year" 
      FROM Employee_Details AS e 

     INNER JOIN Country AS co ON e.Emp_Country_Id = co.Country_Id 
     INNER JOIN State AS s ON e.Emp_State_Id = s.State_Id 
     INNER JOIN Designation AS d ON e.Desig_Id = d.Desig_Id 
     INNER JOIN Salary AS sa ON e.Emp_Id = sa.Emp_Id 

     GROUP BY e.Emp_Id) AS C 
     INNER JOIN Salary ON C.[Change Year] =   
Salary.Emp_Salary_Change_Year; 
    RETURN 2 
END 

答えて

2

結果を変数に入れて、結果を返す:

CREATE FUNCTION dbo.getBonus(@empId INT) 
RETURNS numeric(10,2) 
AS 
BEGIN 
DECLARE @res numeric(10, 2) 
SELECT @res = 
    (Salary.Emp_Salary * .1) 
     FROM 
     (
     SELECT 
      e.Emp_Id AS "Emp Id", 
      MAX(Emp_Salary_Change_Year) AS "Change Year" 
      FROM Employee_Details AS e 

     INNER JOIN Country AS co ON e.Emp_Country_Id = co.Country_Id 
     INNER JOIN State AS s ON e.Emp_State_Id = s.State_Id 
     INNER JOIN Designation AS d ON e.Desig_Id = d.Desig_Id 
     INNER JOIN Salary AS sa ON e.Emp_Id = sa.Emp_Id 

     GROUP BY e.Emp_Id) AS C 
     INNER JOIN Salary ON C.[Change Year] =   
Salary.Emp_Salary_Change_Year; 
    RETURN @res 
END 
+0

おかげで、しかし、関係なく、私が入れ何のidパラメータは、常に7600.00を返しません。 –

+0

入力パラメータ - @empId: – Nayak

+0

に応じて出力を返すための関数にWHERE句を追加するだけでNayakはうまくいきました。溶液が確認された。 –

関連する問題