الأخوة الاعزاء
أنا خبرتي بسيطة جدا عن ال Sql Server
و من خلال العمل رأيت الأشياء التالية
اقتباسscalar functioninline function
table function
فلو ممكن ان يوضح لي أحدكم ماتعنية هذة الأشياء و كيف يمكن ان أستخدمها
و مشكورين
الأخوة الاعزاء
أنا خبرتي بسيطة جدا عن ال Sql Server
و من خلال العمل رأيت الأشياء التالية
اقتباسscalar functioninline function
table function
فلو ممكن ان يوضح لي أحدكم ماتعنية هذة الأشياء و كيف يمكن ان أستخدمها
و مشكورين
السلام عليكم و رحمة الله و بركاته
أخي الكريم
إن شاء الله سوف تجد رد على سؤالك عن كلاً من
SCALAR FUNCTIONS
INLINE TABLE_VALUED FUNCTIONS
MULTISTATEMENT TABLE_VALUED FUNCTIONS
أي الدالات العددية ، الدالات الجدولية الداخلية ، و الدالات الجدولية متعددة الجمل
و كل هذه الدالات السابقة تسمى USER DEFINED FUNCTIONS أي الدالات المعرفة من قبل المستخدم
و لقد وعدني أحد الأخوة في المنتدى بأن يكتب فيهم ، و أن لم يكتب فيهم لأسباب أنشغاله أو ما شابه فلا تنزعج فسوف تجد الرد بالتفصيل بإذن الله .
و شكراً
اولاً اوضح لك ان ال Scalar Function و ال Table Function هى UDFS اى دوال يقوم بانشائها المطور ليقوم باستخدامها من داخل ال MS SQL Server و ال UDF اختصار ل User Defined Functions
ال Scalar Functions
تقوم بارجاع قيمة مفردة يتم تحديدها بعد كلمة Return حيث يقع جسم الدالة بين
Begin /* Function Body * * * * */ End
مثال نريد ان نقوم بارجاع متوسط اسعار سلعه معينه تغيرت اسعارها خلال عام مثلاً
من جدول اسمه Products
فسنقوم بانشاء دالة تقوم بارجاع متوسط اسعار هذه السلعه
create function AvgPrice(@PDName varchar(50)) returns money as Begin declare @AvgPrice money select @AvgPrice=avg(PD)From products where PDN='Socks' return @AvgPrice end
ال Scalar Functions يمكنها ارجاع اى نوع من انواع البيانات ما عدا انواع البيانات التاليه
text, ntext, image, cursor, and timestamp
نعود الان لل Table-Valued Functions هذا النوع من الدوال تقوم تقوم فيه بارجاع مجموعه من السجلات و ليس قيمة مفردة كما فى ال Scalar
ينقسم هذا النوع من الدوال لنوعين inline and multistatement
ال Inline Table-Valued Functions نقوم فيها باضافة كلمة Table لل Returns بدون تحديد اى معلومات عن بنية الجدول الذى سنحتفظ فيه بال RowSet
Create function InlineAvgPrice(@Vendor varchar(50)) returns Table as return (select PDN,PD,Vendor From products where Vendor=@Vendor) go
و يمكن استدعاء الدالة بهذا الشكل مثلاً حيث قمت بتمرير متغير يحوى اسم البلد المنتجه و ستقوم الدالة بارجاع السجلات الخاصة بها
select * from InlineAvgPrice('Egypt')ما ال Multistatement Table-Valued Functions فتختلف عن ال Inline فى كونها تقوم بتحديد هيكل الجدول الذى ستستقبل به ال ROWSET بعد كلمة ال Returns
ايضاً جسم الدالة سيكون سيكون بين Begin .......End
شكل الدالة سيكون بهذا الشكل
Create function MultiStatAvgPrice(@Price money=0.0) returns @MyTable table(FLD1 Varchar(50),FLD2 varchar(50)) as BEGIN Insert @MyTable select PDN,Vendor from Products where PD<> @Price return end go
هنا عرفت متغير من نوع ال Table و بالمناسبة ال SQL Server 2000 لمن لا يعلم يسمح بتعريف متغير من نوع الجدول
ثم قمت بتحديد هيكلية الجدول الذى ساستقبل فيه البيانات و مررت للداله السعر الذى اريد الدالة ان تقوم بارجاع جميع السجلات التى تحتوى على سعر لا يساوى السعر الذى مررناه للدالة
و لاستخدام الدالة سيكون بهذا الشكل
select * from MultiStatAvgPrice(10.0)
مرفق هيكل الجدول الذى اجرب عليه المثال تجريبى و لم اراع فيه اى شئ اخر
تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 4 مايو 2005 في 22:34
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
السلام عليكم و رحمة الله و بركاته
مجهود ممتاز يا طارق
ربنا يكرمك و يسر ليك الحال و ينور طريق كل من أنار طريق كل طالب علم
و السلام عليكم و رحمة الله و بركاته
السلام عليكم ورحمة الله وبركاته
==================
الأستاذ الكريم طارق إبراهيم
شكرا جزيلا على هذه المعلومات
ولدى سؤال عن Scalar Functions
كيف أستطيع أن أستخدم جملة الشرط (حيث حاولت إستخدامها مثل المتبع به فى الفيجوال بيزك ولكن كان هناك خطأ)
if ----- then
else
end if
وما هى الجملة الخاصة بالتحقق من أن الexpression هو Numeric
أرجو المساعدة
تقبلوا تحياتى
استخدام الشرط فى T-SQL
عبارة الشرط IF statement تاخذ معامل واحد و هو الشرط الذى نقوم باختباره مثال بسيط مثلاً بالاعتماد على الشرح باعلى
Alter function AvgPrice(@PDName varchar(50)) returns money as Begin declare @AvgPrice money if @PDName = 'Socks' begin select @AvgPrice=avg(PD)From products where PDN='Socks' end else select @AvgPrice=avg(PD)From products where PDN='Shirts' return @AvgPrice end
هنا قمت بعمل شرط بسيط إذا كان اسم المنتج Socks سيقوم بعرض متوسط اسعار هذا المنتج و إذا كان اسم المنتج Shirts فسيقوم بعرض متوسك اسعاره
اقتباسوما هى الجملة الخاصة بالتحقق من أن الexpression هو Numeric
باستخدام الدالة ISNumeric مع إمرار تعبير لها لتقوم باختباره
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
شكرا أخي العزيز طارق إبراهيم
و أسعد الله أيامك
بسم الله الرحمن الرحيم
=============
جزاك الله خيرا أستاذى الكريم
ولقد نجحت فى إنشاء الدالة التى كنت أريدها بفضل الله ثم بفضلكم
وفقك الله ويسر أمورك وفتح عليك
والسلام عليكم
طيب يا شباب لو حابب أستخدم الدوال السابقة من داخل بيئة ال Visual Studio.Net كيف يمكن لي ذلك ؟
لك وحشة يا عصام حظى كل ما اغيب ارجع ارد عليك فى موضوع
نداء ال User Defined Function من خلال ال VB.NET سيكون بشكل بسيط كما تفعل فى ال Stored Procedure و لكن فى هذه المرة ستجعل ال CommandText بهذاالشكل مثلاً
With CMD .Connection = CN .CommandType = CommandType.Text .CommandText = "Select * From DBO.MyUDF(@AnyParameter)" End With
لاحظ التغيير فى شكل ال CommandText فقط
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
هذا الموضوع مغلق.