logo

وظائف خادم SQL

الوظائف في SQL Server هي كائنات قاعدة البيانات التي تحتوي على ملف مجموعة من عبارات SQL لأداء مهمة محددة . تقبل الوظيفة معلمات الإدخال، وتنفذ الإجراءات، ثم ترجع النتيجة. يجب أن نلاحظ أن الدوال تُرجع دائمًا قيمة واحدة أو جدولًا. الغرض الرئيسي من الوظائف هو تكرار المهمة المشتركة بسهولة. يمكننا بناء الوظائف مرة واحدة ويمكننا استخدامها في مواقع متعددة بناءً على احتياجاتنا. لا يسمح SQL Server باستخدام وظائف إدراج السجلات أو حذفها أو تحديثها في جداول قاعدة البيانات.

فيما يلي قواعد إنشاء وظائف SQL Server:

  • يجب أن يكون للوظيفة اسم، ولا يمكن أن يبدأ الاسم بحرف خاص مثل @ أو $ أو # أو أحرف أخرى مشابهة.
  • عبارات SELECT هي الوحيدة التي تعمل مع الوظائف.
  • يمكننا استخدام وظيفة في أي مكان مثل AVG وCOUNT وSUM وMIN وDATE ووظائف أخرى مع استعلام SELECT في SQL.
  • عندما يتم استدعاء دالة، يتم تجميعها.
  • يجب أن تقوم الدالات بإرجاع قيمة أو نتيجة.
  • تستخدم الوظائف معلمات الإدخال فقط.
  • لا يمكننا استخدام عبارات TRY وCATCH في الوظائف.

أنواع الوظائف

يصنف SQL Server الوظائف إلى نوعين:

  • وظائف النظام
  • الوظائف المحددة من قبل المستخدم

دعونا نصف كلا النوعين بالتفصيل.

وظائف النظام

تُعرف الوظائف التي يحددها النظام بوظائف النظام. وبعبارة أخرى، كل وظائف مدمجة ويشار إلى وظائف النظام التي يدعمها الخادم. توفر لنا الوظائف المدمجة الوقت أثناء أداء المهمة المحددة. تعمل هذه الأنواع من الوظائف عادةً مع عبارة SQL SELECT لحساب القيم ومعالجة البيانات.

فيما يلي قائمة ببعض وظائف النظام المستخدمة في SQL Server:

  • وظائف السلسلة (LEN، SUBSTRING، REPLACE، CONCAT، TRIM)
  • وظائف التاريخ والوقت (وقت التاريخ، وقت التاريخ 2، وقت التاريخ الصغير)
  • الدوال المجمعة (COUNT، MAX، MIN، SUM، AVG)
  • الدوال الرياضية (ABS، POWER، PI، EXP، LOG)
  • وظائف الترتيب (RANK، DENSE_RANK، ROW_NUMBER، NTILE)

الصورة التالية توضح جميع وظائف قاعدة البيانات المضمنة المستخدمة في SQL Server:

وظائف خادم SQL

الوظائف المحددة من قبل المستخدم

الوظائف التي تم إنشاؤها من قبل المستخدم في قاعدة بيانات النظام أو قاعدة البيانات المعرفة من قبل المستخدم تُعرف بالوظائف المعرفة من قبل المستخدم. تقبل وظائف UDF المعلمات وتنفذ الإجراءات وترجع النتيجة. تساعدنا هذه الوظائف على تبسيط تطويرنا من خلال تغليف منطق الأعمال المعقد وإتاحته لإعادة الاستخدام في أي مكان بناءً على الاحتياجات. تعمل الوظائف المحددة من قبل المستخدم على تسهيل كتابة التعليمات البرمجية اللازمة للاستعلام عن البيانات. كما أنها تعمل على تحسين إمكانية قراءة الاستعلام ووظائفه، بالإضافة إلى السماح للمستخدمين الآخرين بتكرار نفس الإجراءات.

يصنف SQL Server الوظائف المعرفة من قبل المستخدم بشكل أساسي إلى نوعين:

  1. وظائف العددية
  2. وظائف الجدول القيمة

وفيما يلي أوصاف وظائف UDF هذه.

وظائف العددية

وظيفة العددية في SQL Server دائمًا يقبل المعلمات، سواء كانت مفردة أو متعددة ويعيد قيمة واحدة . تعتبر الوظائف العددية مفيدة في تبسيط الكود الخاص بنا. لنفترض أنه قد يكون لدينا عملية حسابية معقدة تظهر في عدد من الاستعلامات. في مثل هذه الحالة، يمكننا إنشاء دالة عددية تقوم بتغليف الصيغة واستخدامها في كل استعلام بدلاً من كل استعلام.

فيما يلي بناء الجملة الذي يوضح إنشاء دالة عددية في SQL Server:

 CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

يتم وصف معلمات بناء الجملة أعلاه أدناه:

سنقوم أولاً بتحديد اسم الوظيفة بعد إنشاء وظيفة الكلمات الدالة. اسم المخطط اختياري. إذا لم نحدد اسم المخطط، فسيستخدم SQL Server المخطط الافتراضي dbo . بعد ذلك، سوف نقوم بتحديد القائمة حدود محاطة بين قوسين. ثالثًا، سنكتب عبارات الدالة ثم في ملف عائدات بيان، حدد نوع بيانات القيمة المرجعة. وأخيرًا، أضفنا عبارة RETURN لإرجاع قيمة داخل نص الدالة.

مثال

هذا المثال سوف ينشئ دالة ل حساب صافي المبيعات على أساس الكمية والسعر وقيمة الخصم:

 CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END; 

الآن يمكننا استخدام هذه الدالة لحساب صافي المبيعات لأي أمر مبيعات في الجدول المحدد.

تعرض الصورة التالية حيث يمكننا العثور على الوظائف العددية:

وظائف خادم SQL

يمكننا استدعاء الوظائف العددية مثل الوظيفة المضمنة في SQL Server. على سبيل المثال، يمكننا استدعاء وظيفة udfNet_Sales المذكورة أعلاه على النحو التالي:

 SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales; 

سيؤدي تنفيذ هذه الوظيفة إلى إرجاع صافي المبيعات:

وظائف خادم SQL

يسمح لنا SQL Server أيضًا بذلك لتعديل الدالة العددية باستخدام ALTER الكلمة الرئيسية. هنا هو بناء الجملة للقيام بذلك:

 ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

يمكننا استخدام العبارة أدناه لإزالة الدالة العددية من قاعدة بيانات SQL Server:

 DROP FUNCTION [schema_name.]function_name; 

وظائف الجدول القيمة

الوظائف ذات القيمة الجدولية في SQL Server هي وظيفة محددة من قبل المستخدم الذي يقوم بإرجاع بيانات نوع الجدول. منذ هذه الوظيفة نوع الإرجاع هو جدول يمكننا استخدامه بنفس الطريقة التي نستخدم بها الجدول.

يمكننا تصنيف الدالة ذات القيمة الجدولية إلى نوعين:

1. وظائف جدول القيم المضمنة

تقوم دالة UDF بإرجاع متغير جدول بناءً على الإجراء الذي تقوم به الوظيفة. يجب استخدام عبارة SELECT واحدة لتحديد قيمة متغير الجدول.

مثال

سيقوم المثال أدناه بإنشاء دالة قيم الجدول واسترداد بيانات جدول الموظف:

 --It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee) 

في بناء الجملة هذا، جدول المرتجعات يحدد أن الوظيفة ستعيد جدولاً. وبما أنه لا يوجد البداية...النهاية بيان، فإنه ببساطة يستعلم عن البيانات من جدول الموظف. وأيضًا، إذا لم يكن لديه أي معلمات، فسيتم استدعاؤه مباشرة.

يمكننا استدعاء الدوال ذات القيمة الجدولية باستخدام الدالة من بند من يختار استفسار. على سبيل المثال ، يمكننا أن نسمي ما سبق udf_GetEmployee وظيفة على النحو التالي:

 SELECT * FROM udf_GetEmployee(); 

سيؤدي تنفيذ هذه الوظيفة إلى إرجاع النتيجة التالية:

وظائف خادم SQL

يسمح لنا SQL Server أيضًا بتعديل الوظائف ذات القيمة الجدولية باستخدام الكلمة الأساسية ALTER بدلاً من الكلمة الأساسية CREATE. بقية النص هو نفسه.

وظائف جدول القيمة متعددة البيانات (MSTVF)

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

يقوم المثال التالي بإنشاء اسم دالة 'متعددة القيم' الذي يعيد ' @موظف' طاولة. يحتوي على ثلاثة حقول تسمى id وemp_name والراتب من 'موظف' الجدول باستخدام عبارة INSERT، ثم يستخدم عبارة UPDATE لتحديث اسم الموظف.

 CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END 

يمكننا استدعاء الدوال ذات القيمة الجدولية متعددة العبارات باستخدام جملة FROM في استعلام SELECT. على سبيل المثال ، يمكننا استدعاء الوظيفة المذكورة أعلاه على النحو التالي:

 SELECT * FROM MULTIVALUED(); 

سيؤدي تنفيذ هذه الوظيفة إلى إرجاع النتيجة التالية:

وظائف خادم SQL

متى يجب استخدام الدوال ذات القيمة الجدولية؟

يتم استخدام الوظائف ذات القيمة الجدولية بشكل شائع كطرق عرض ذات معلمات. تعد الوظائف ذات القيمة الجدولية أكثر مرونة من الإجراءات المخزنة لأنه يمكن استخدامها في أي مكان يتم فيه استخدام الجداول.

خاتمة

د الوجه بالتخبط

تشرح هذه المقالة نظرة عامة كاملة على الوظائف المستخدمة في SQL Server. لقد تعلمنا هنا بشكل أساسي نوعين من الوظائف المستخدمة في SQL Server: النظام والوظائف المحددة من قبل المستخدم.