2016-11-07 2 views
0

Ich bekomme diesen Fehler und nicht sicher, was zu tun ist. Wie kann ich das aktuelle Gehalt basierend auf dem Parameter @empId zurückgeben? Zum Beispiel sollte es, wenn ich die Funktion wie dbo.getBonus (3) rufen zurück: 5600,000Erstellen einer UDF mit Rückgabewert basierend auf Parameter

Hier ist die Tabelle, die erstellt wird, wenn ich die Abfrage ausführen:

EmpId Bonus 
3 5600.000 
4 18500.000 
5 15600.000 
6 7600.000 

Fehlermeldung:

Msg 444, Ebene 16, Status 2, Prozedur getBonus, Zeile 188 Select-Anweisungen, die in einer Funktion enthalten sind, können keine Daten an einen Client zurückgeben.

Danke.

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 

Antwort

2

das Ergebnis einer Variablen anlegen und das Ergebnis zurück:

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

danke, aber egal, was id-Parameter i in setzen, es gibt immer 7600.00. –

+0

Fügen Sie einfach eine WHERE-Klausel in die Funktion für die Rückgabe der Ausgabe gemäß dem Eingabeparameter - @empId :) – Nayak

+0

Dank Nayak, die gearbeitet hat. Lösung bestätigt. –

Verwandte Themen