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

كيف أكتب Trigger يأخذ القيمة قبل التعديل ويضيفها في مكان أخر

مغلق
بدأه web.pro في 24 مايو 2008 · 3 رد · 1,259 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد ان اكتب تريغر عند التعديل على حقل ما في جدول بحيث يأخذ القيمة قبل التعديل ويطرحها من القيمة الجديدة والفرق يضيفها الى حقل اخر في جدول اخر

وشكرا للمساعدة

#2

السلام عليكم

 [ CREATE TRIGGER Trigger_Name ON Table_Name 
   AFTER UPDATE
AS BEGIN SET NOCOUNT ON;


declare @old as int
declare @New as int

select @old = FieldName from deleted 
select @new =FieldName from inserted 
update OtherTable set SomeField = @New -@old


END

يوضع هذا على الجدول الذي به القيم والتي ستتعدل

عليك بتغيير اسماء الجدوال والحقول وتغيير نوع الحقل وفحص القيم والتأكد منها بما يناسبك وافترض ان صف واحد فقط تعدل

وللعلم ايضا

الجدول deleted هو جدول وهمي به القيم السابقة التي تعدلت ومطابق للجدول الاصلي

الجدول inserted هو جدول وهمي به القيم الجديدة ومطابق للجدول الاصلي

تم تعديل هذه المشاركة بواسطة TareqVB في 25 مايو 2008 في 08:08

#3

جزاك الله خيرا

والله يبارك فيك

حللت لي مشكلة كبيرة بالنسبة لي

#4

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

  1. Sql
  2.  

create trigger (trigger name ) on (table name)

for update

as

update (table name)

set (row name) = inserted.(row name ) - deleted.(row name)

from inserted,deleted;

الشرح بسيط

بنشأ تريجر اسمه كذا على التابل اللى اسمه كذا

بعد الابديت

ابديت التابل اللى اسمه كذا

خلى الرو = الرو اللى دخلته - الرو اللى اتمسح (القديم) بس

من الاتنين تابل اللى هم inserted , deleted

شرح اكثر دقه بالنسبه لنقطه معينه

لما بعمل تريجر على تابل معين مش لازم لما اجى اكتب اسم اى رو جواه اكتب قبليه اسم التابل

يعنى لو عملت تريجر على تابل اسمه احمد وفيه رو اسمه اى دى

يبقى لما اجى احطه فى اى معادله اكتب اى دى على طول مش لازم اعمل ahmed.ID

لكن لو فى المعادله بتاعتك انك مثلا

عندك فى التابل بتاعنا اللى اسمه احمد رو اسمه كميه

quantity

وعايز تطرح منها مثلا كميه من تابل اسمه محمد يبقى لازم تكتب محمد قبل كمييه

mohamed.quantity

يبقى المعادله هاتكون

set quantity = quantity - mohamed.quantity

وفى الاخر لازم تعرفه التابل بتاع محمد ده يعنى هاتيجى فى الاخر وتقوله

from mohamed بس

مش هانكتب from mohamed , ahmed

لان التريجر اصلا معمول على التابل احمد يبقى كده كده هو فاهم اننا فيه يبقى مش هاتكتبه هانكتب اى تابل تانى دخل فى المعادله

شرح لحته تانيه

انا فى الكود الاولانى جيت كتبت فى الاخر

from inserted,deleted ;

ايه الكلام ده بقه

دول ياسيدى تابلز وهمين

مش فاهم

اقولك

لما تيجى تدخل اول مره فى الرو مثلا دخلت 5 يبقى التابل اللى اسمه انسرتيد ده القيمه بتاعته بتساوى خمسه

طيب لما اجى اعمل ابديت للقيمه اللى خمسه ايه اللى يحصل

لما اجى اعمل ابديت للقيمه مثلا عملت ابديت وخليت الرو 10 دلوقتى كده كانك مسحت الخمسه ودخلت رقم جديد اللى هو 10

كده يبقى التابل بتاع ديليتيد بقه بخمسه والانسرتيد بقه بعشره

يبقى المعادله بتاعتك اللى انت عايزها

خلى قيمه الروو = القيمه الجديده اللى لسه داخله - القيمه القديمه اللى اتمسحت

راجع الكود

ويارب اكون وصلت اللى انت عايزه

معلومه دى اول مشاركه ليه لو فيه اى غلطات ياريت تقولهالى وتقولولى حلها بالنسبه للموضوع

top-logo.jpg

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…