تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[SQL] القوادح و طريقة عملها و الفائدة منها
#1
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله
ساتحدث في هذه المقال عن معلومة مفيدة تختص بالقوادح (Triggers) و الفائدة من استخدامها

القوادح 3 انواع
DML , DDl , LOGON
في هذه المقالة سوف اتحدث عن النوع DML TRIGGERS وفق مثال عملي مباشر للوصول الى الفائدة المرجوة
قد تحتاج في بعض الاحيان الى وجود عمليات يقوم بها السيرفر في الخلفية نيابة عنك , و هذه العمليات تعتمد على اجراء ما قام به المستخدم 
مثال ان يقوم المستخدم باضافة و تعديل او حذف لاي سجل في اي جدول (حديثي سيقتصر هنا على الجدول او الاستعلام)
عندها سيقوم القادح بالتصرف وفق نوع العملية التي بني من اجلها


DML TRIGGERS تقسم الى نوعين
1ِِِ- AFTER TRIGGERS و احيانا تسمى FOR TRIGGERS
2- INSTEAD OF TRIGGERS
النوع الاول ياتي بعد القيام بالعملية , بمعنى ان القادح سيعمل بعد القيام بعملية(الاضافة او التحديث او الحذف)
النوع الثاني ياتي مترافقا مع العملية (الاضافة و التعديل و الحذف)
و هنا سوف اتحدث عن النوع الاول FOR TRIGGERS
و لنبدأ مباشرة بمثال عملي 
لدي جدولين الاول يحتوي على اربعة حقول  كما هو واضح بالصورة



و الثاني يحتوي على حقلين كما يلي



ناتي اولا الى التعرف على طريقة انشاء القادح
الشكل القواعدي لانشاء القادح كما يلي 

PHP كود :
Create Trigger Trigger_Name
On Table_Name
For Action_Name
AS
Begin


End 

كود سهل و خفيف و لذيذ
طبعا نعطي اسم معبر للقادح
و نحدد اسم الجدول الذي يعمل عليه القادح
و ثم نحدد العملية التي سيعمل بعدها القادح (For Insert , For Delete , For Update)

كلام جميل و ماذا بعد ؟؟؟
لندخل في المضمون بشكل مباشر , الان نريد انشاء قادح مهمته تاتي بعد اي عملية اضافة يقوم بها المستخدم .
اريد من القادح ان يقوم باضافة تفصيل في الجدول EmpEdit (لكل حركة اضافة جديدة يقوم بها المستخدم على الجدول الاول EMP) 
كما هو لدي في الجدول الثاني EmpEdit حقلين الاول ساخزن به Id الخاص بالحقل الذي جرت عليه العملية و الحقل الثاني ساخزن فيه نوع الحركة التي تمت على السجل و هي هنا الاضافة 

الذي ساحتاج اليه هو الحصول على السجل المضاف او المعدل او حتى المحذوف و من ثم تخزينه في الجدول الثاني
لكن كيف لي ان اعرف اي سجل اضيف او حذف او عدل ؟؟؟

من الامور الجميلة في SQL SERVER  ان هناك جدول خاص و سحري لكل عملية تجري
فلدينا جدول اسمه INSERTED يقوم بتخزين عمليات الاضافة و هو مشابه في التصميم للجدول الذي بني عليه
اقصد هنا العبارة (On Table_Name) التي وردت في الكود السابق.
و كذلك لدينا جدول اسمه DELETED و جدول UPDATED

انتبه هذه الجدوال موجودة فقط او بعبارة اخرى يتم توليدها فقط ضمن بلوك TRIGGERS فقط , اذ لا يمكنك الوصول اليها من خارج البلوك الخاص بـ TRIGGERS

هذا رائع : اذا سيصبح لدينا جدول لكل حالة يقوم بها المستخدم و بالتالي ساقوم فقط باستيراد البيانات من هذه الجداول و تخزين الحالة (حالة العملية التي قام بها المستخدم)
في حالتنا هنا سنقوم باضافة السجل الجديد الذي قام باضافته المستخدم
لنرى الكود كيف سيصبح مع حالة الاضافة 


PHP كود :
Create Trigger Tr_ForInserted
On Emp
For Insert
AS
Begin


End 

Tr_ForInserted : هو اسم القادح
On Emp : هو اسم الجدول الذي سيعمل عليه القادح
For Insert :القادح سيعمل بعد عملية الاضافة
كلام سهل و واضح , و ماذا بعد , الكود فارغ و القادح لا يؤدي اي عملية ؟؟

لنعود الى كلامنا : المطلوب هو ادخال رقم Id ,ونوع العملية التي جرت في الجدول EmpEdit (دعنا ندخل تاريخ العملية ايضا)

اذا مهمتنا تنحصر في معرفة رقم Id من الجدول Inserted , و كذلك تسجيل معلومة كما يلي (تمت الاضافة بتاريخ ؟)
بالنسبة للتاريخ يمكننا الحصول عليه من توابع التاريخ الخاصة SQL SERVER التابع (GetDate

اكتملت المهمة لنرى الكود كيف اصبح


PHP كود :
Create Trigger Tr_ForInserted
On Emp
For Insert
AS
Begin
Declare @Id int
Select 
@IdId From Inserted


Insert Into EmpEdit 
Values
(@Id,' سجل جديد بتاريخ  ' CAST(getdate() as nvarchar(20)))


End 

Declare @Id int : تعريف متغير رقمي
ٍSelect @Id =Id From Inserted : الحصول على رقم Id من الجدول Inserted
و من ثم جملة ادخال عادية تقوم باضافة سطر جديد الى الجدول EmpEdit
Cast : نستخدمه للتحويل بين الانواع
الان اعمل تنفيذ ليتم تخزين القادح , القادح سيظهر  في بند TRIGGERS الخاص بالجدول
الان حاول اضافة اي اسطر جديدة الى الجدول Emp و تفقد بعدها الجدول EmpEdit

هذه المقالة فقط للتعريف بالقوادح و فائدتها , يمكنك التوسع في الموضوع و اجراء عمليات بعد الحذف كأن تقوم بتخزين السجلات المحذوفة و تاريخ حذفها و ان تربط معها كذلك اسم المستخدم الذي حذفها
الافكار كثيرة و القوادح مفيدة تعطيك قوة و مرونة و توفر عليك الكثير من الجهد
بالتوفيق للجميع
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
#2
شاكر لك الطرح المفيد ،، استمتعت بقراءته
اسم معرفي : محمد يحيى
الرد }}}
تم الشكر بواسطة: ابو ليلى , سعود
#3
شكرا على المعلومات اخي
الرد }}}
تم الشكر بواسطة: ابو ليلى , سعود


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طريقة عرض الأيام باللغة العربية في استعلام SQL Server ggtt17121985 0 982 12-10-23, 10:22 PM
آخر رد: ggtt17121985
  طريقة إنشاء ملف سكربت لقاعدة البيانات مع الاحتفاظ بالبيانات ملهمـ 0 1,656 06-04-21, 02:33 AM
آخر رد: ملهمـ
  معلومة --- القوادح Triggers RaggiTech 3 6,224 21-10-12, 06:48 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم