الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال فى Function

بدأه shosho842000 في 21 يونيو 2009 · 3 رد · 845 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمته الله وبركاته

ما الخطا فى هذه الfunction

رمز:

CREATE FUNCTION dbo.Gettax1(@deg NVARCHAR(50)=NULL)
RETURNS decimal(16,3)
AS
BEGIN
declare @Text decimal(16,3)
declare @total decimal(16,3)
set @total=(select total_sal,total1,sal9,sal10,sal12,sal14,sal15,total from salary)
begin
if @deg='مدير عام'
	set @Text=(@total * 10 / 100 )
 if @deg='درجة اولى'
	set @Text=(@total * 7 / 100 )
if @deg='درجة ثانية'
	set @Text=(@total * 6 / 100 )
 if @deg='درجة ثالثة'
	set @Text=(@total * 5 / 100 )
end
return @Text

ENDحيث انها تقوم بتجميع الحقول ثم اجراء عملية حسابية عليها

وشكرا

دا الerror الى بيظهر ياريت الاحقى حل ؟؟؟؟؟؟؟؟

7.rar

#2

وعليكــم السـلام ورحمة الله وبركاتـه..

تم نقل الموضوع لمنتدى ال MS SQL Server لان المناسب للموضوع و ليس منتدى ال ADO.NET

المشكلة دليك فى القيمة التى تعود من تنفيذ الكود لديك فانت فى تعريف الدالة حددت ان القيمة التى ستعود Return Value ستكون قيمة وحيدة Scalar

RETURNS decimal(16,3)

بينما فى الكود التالى

set @total=(select total_sal,total1,sal9,sal10,sal12,sal14,sal15,total from salary)

سيعود لك اكثر من قيمة فى هيئة جدول

لحل المشكلة عليك اما بوضع شرط باستخدام Where Statement و سيكون بالشكل

set @total=(select total_sal,total1,sal9,sal10,sal12,sal14,sal15,total from salary Where Degree = @Deg)

و هذا الحل لا افضله لانك ممكن تمرر Null كقيمة لل @deg التى تمررها للدالة

لذا فمن الافضل تعديل الدالة لتصبح كالاتى


(@deg NVARCHAR(50)=NULL)
RETURNS Table
AS return(select total_sal,total1,sal9,sal10,sal12,sal14,sal15,total =
CASE @deg
When 'مدير عام' Then (total * 10 / 100 )
When 'درجة اولى' Then (total * 7 / 100 )
When 'درجة ثانية'Then(total * 6 / 100 )
When 'درجة ثالثة' Then(total * 5 / 100 )
End
from salary) GO
CREATE FUNCTION Gettax1

جرب و اخبرنا بالنتيجة (هذا فى حال عدت لزيارة المنتدى مرة اخرى قريباً)

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 26 يونيو 2009 في 14:57

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#4
shosho842000 كتب:
السلام عليكم ورحمته الله وبركاته

ما الخطا فى هذه الfunction

رمز:

CREATE FUNCTION dbo.Gettax1(@deg NVARCHAR(50)=NULL)
RETURNS decimal(16,3)
AS
BEGIN
declare @Text decimal(16,3)
declare @total decimal(16,3)
set @total=(select total_sal,total1,sal9,sal10,sal12,sal14,sal15,total from salary)
begin
if @deg='مدير عام'
	set @Text=(@total * 10 / 100 )
if @deg='درجة اولى'
	set @Text=(@total * 7 / 100 )
if @deg='درجة ثانية'
	set @Text=(@total * 6 / 100 )
if @deg='درجة ثالثة'
	set @Text=(@total * 5 / 100 )
end
return @Text

ENDحيث انها تقوم بتجميع الحقول ثم اجراء عملية حسابية عليها

وشكرا

دا الerror الى بيظهر ياريت الاحقى حل ؟؟؟؟؟؟؟؟

فقط اضف end ما بعد return @Text

MCP

MCTS:.Net Framework 2.0: Web Applications

MCPD:Web Developer

مواضيع مشابهة