2016-11-07 42 views
0
返回值的UDF

我得到這個錯誤,不知道該怎麼做。 另外,如何根據參數@empId返回當前工資。舉例來說,如果我叫喜歡dbo.getBonus功能(3)它應該返回:5600.000創建一個基於參數

下面是創建表時我運行查詢:

EmpId Bonus 
3 5600.000 
4 18500.000 
5 15600.000 
6 7600.000 

錯誤消息:

消息444,級別16,狀態2,過程getBonus,行188 選擇包含在函數中的語句不能將數據返回給客戶機。

謝謝。

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

只需在函數中添加WHERE子句以根據輸入參數返回輸出 - @empId :) – Nayak

+0

感謝Nayak的工作。解決方案確認 –