norman_asad

scalar inline table function ?

10 ردود في هذا الموضوع

الأخوة الاعزاء

أنا خبرتي بسيطة جدا عن ال Sql Server

و من خلال العمل رأيت الأشياء التالية

scalar function

inline function

table function

فلو ممكن ان يوضح لي أحدكم ماتعنية هذة الأشياء و كيف يمكن ان أستخدمها

و مشكورين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

أخي الكريم

إن شاء الله سوف تجد رد على سؤالك عن كلاً من

SCALAR FUNCTIONS

INLINE TABLE_VALUED FUNCTIONS

MULTISTATEMENT TABLE_VALUED FUNCTIONS

أي الدالات العددية ، الدالات الجدولية الداخلية ، و الدالات الجدولية متعددة الجمل

و كل هذه الدالات السابقة تسمى USER DEFINED FUNCTIONS أي الدالات المعرفة من قبل المستخدم

و لقد وعدني أحد الأخوة في المنتدى بأن يكتب فيهم ، و أن لم يكتب فيهم لأسباب أنشغاله أو ما شابه فلا تنزعج فسوف تجد الرد بالتفصيل بإذن الله .

و شكراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اولاً اوضح لك ان ال 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 [email protected])
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)

مرفق هيكل الجدول الذى اجرب عليه المثال تجريبى و لم اراع فيه اى شئ اخر

Products.rar

تم تعديل بواسطه طارق إبراهيم
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

مجهود ممتاز يا طارق

ربنا يكرمك و يسر ليك الحال و ينور طريق كل من أنار طريق كل طالب علم

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

==================

الأستاذ الكريم طارق إبراهيم

شكرا جزيلا على هذه المعلومات

ولدى سؤال عن Scalar Functions

كيف أستطيع أن أستخدم جملة الشرط (حيث حاولت إستخدامها مثل المتبع به فى الفيجوال بيزك ولكن كان هناك خطأ)

if ----- then

else

end if

وما هى الجملة الخاصة بالتحقق من أن الexpression هو Numeric

أرجو المساعدة

تقبلوا تحياتى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

استخدام الشرط فى 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 مع إمرار تعبير لها لتقوم باختباره

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا أخي العزيز طارق إبراهيم

و أسعد الله أيامك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

=============

جزاك الله خيرا أستاذى الكريم

ولقد نجحت فى إنشاء الدالة التى كنت أريدها بفضل الله ثم بفضلكم

وفقك الله ويسر أمورك وفتح عليك

والسلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

طيب يا شباب لو حابب أستخدم الدوال السابقة من داخل بيئة ال Visual Studio.Net كيف يمكن لي ذلك ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لك وحشة يا عصام حظى كل ما اغيب ارجع ارد عليك فى موضوع

نداء ال User Defined Function من خلال ال VB.NET سيكون بشكل بسيط كما تفعل فى ال Stored Procedure و لكن فى هذه المرة ستجعل ال CommandText بهذاالشكل مثلاً

With CMD
.Connection = CN
.CommandType = CommandType.Text
.CommandText = "Select * From DBO.MyUDF(@AnyParameter)"
End With

لاحظ التغيير فى شكل ال CommandText فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .