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

مساعدة في كتابة Trigger

بدأه mumado99 في 4 يناير 2010 · 4 رد · 1,475 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

تحية و حترام و سنة جديدة خير عليكم إن شاء الله

أنا مرفق صورة لجداول من قاعدة البيانات الخاصة بي حيث يوجد جدول اسمه std مبين فيه تخصص كل طالب و جدول آخر اسمه exams فيه مجموعة الامتحانات للكلية حيث كل امتحان مبين فيه التخصص المطلوب منه الامتحان أما الجدول الأخير فهو جدول std_exams حيث فيه جميع الامتحانات لكل الطلاب يعني لو فيه طالب من قسم cs و قسم الـ cs فيه 4 امتحانات فان جدول الـ std_exams يجب أن يكون فيه أربع مدخلات للطالب الواحد من قسم الـ cs .

أنا اربد ان اعمل Trigger ادخال على جدول الـ std بحيث كل ما يدخل اسم جديد على الجدول يقوم الـ trigger بعملية ادخال جديد على جدول الـ std_exams .

الرجاء مراجعة المرفق حيث ان الشرح اوسع بالرسم .

post-115775-12625872579633_thumb.jpg

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#2

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

أخي الكريم بصراحة أنا ماني حاسس إنها كتير مشكلة كبيرة ولو مكانك ما بستخدم Trigger طبعاً لأنه بعد أن استخدمت القوادح في برامج كثيرة حسيت إنو أوقات مالو طعمة أو بمعنى آخر قد يحصل خطأ بتنفيذ الـ Trigger و لا تعلم بذلك مما يؤدي إلى جعل قاعدة البيانات غير متسقة .. لذلك بالفترة الماضية كان اعتمادي على الإجراءات المخزنة وذلك لسبب بسيط هو أني قادر دائماً على التحقق من تنفيذ عبارات الـ T-SQL المحتواة في الإجراء المخزن و ذلك عبر القيمة المعادة .. بكل الأحوال لو كنت مكانك أستخدم إجراء مخزن لحشر سجل جديد في الـ STD Table و بنفس الإجراء و ضمن نفس المناقلة أقوم بإضافة السجلات المطلوبة على بقية الجداول .. مثلاً الإجراء التالي (غير مجرب لكن :wink: ) :

Create proc STD_Insert

	@STD_ID int = null,
	@STD_Name Nvarchar(100)=null,
	@Specialization_Code Nvarchar(100)=null

AS


	begin tran

	begin try 

		Insert [STD](STD_Name, Specialization_Code) 
			Select
				@STD_Name,
				@Specialization_Code

		-- if the STD_ID was identity u can here select it using SCOPE_IDENTITY()

		Insert STD_Exams( STD_Exam, STD_ID, Exam_ID ) 
			Select  
					Cast(@STD_ID AS Nvarchar(100)) + Cast(@Exam_ID  AS Nvarchar(100)),
					@STD_ID, 
					Exam_ID From Exams 
			Where Specialization_Code = @Specialization_Code


		commit tran

	end try
	begin catch

        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;

	end catch

GO

تم تعديل هذه المشاركة بواسطة imadouzoun في 4 يناير 2010 في 11:34

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#3
imadouzoun كتب:

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

أخي الكريم بصراحة أنا ماني حاسس إنها كتير مشكلة كبيرة ولو مكانك ما بستخدم Trigger طبعاً لأنه بعد أن استخدمت القوادح في برامج كثيرة حسيت إنو أوقات مالو طعمة أو بمعنى آخر قد يحصل خطأ بتنفيذ الـ Trigger و لا تعلم بذلك مما يؤدي إلى جعل قاعدة البيانات غير متسقة .. لذلك بالفترة الماضية كان اعتمادي على الإجراءات المخزنة وذلك لسبب بسيط هو أني قادر دائماً على التحقق من تنفيذ عبارات الـ T-SQL المحتواة في الإجراء المخزن و ذلك عبر القيمة المعادة .. بكل الأحوال لو كنت مكانك أستخدم إجراء مخزن لحشر سجل جديد في الـ STD Table و بنفس الإجراء و ضمن نفس المناقلة أقوم بإضافة السجلات المطلوبة على بقية الجداول .. مثلاً الإجراء التالي (غير مجرب لكن :wink: ) :

Create proc STD_Insert

	@STD_ID int = null,
	@STD_Name Nvarchar(100)=null,
	@Specialization_Code Nvarchar(100)=null

AS


	begin tran

	begin try 

		Insert [STD](STD_Name, Specialization_Code) 
			Select
				@STD_Name,
				@Specialization_Code

		-- if the STD_ID was identity u can here select it using SCOPE_IDENTITY()

		Insert STD_Exams( STD_Exam, STD_ID, Exam_ID ) 
			Select  
					Cast(@STD_ID AS Nvarchar(100)) + Cast(@Exam_ID  AS Nvarchar(100)),
					@STD_ID, 
					Exam_ID From Exams 
			Where Specialization_Code = @Specialization_Code


		commit tran

	end try
	begin catch

        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;

	end catch

GO

شكرا اخ عماد على الرد و التعاون

بس بصراحة موضوع التريجر انا مهم جدا بالنسبة لبيئة العمل اللي انا شغال فيها لانو في عندي احتماليه انو من نظام تاني غير اللي قاعد اطور فيه حاليا ممكن ان تتم عملية ادخال لطالب جديد على نفس الجدول اللي انا شغال عليه ببرنامجي انا ! عشان هيك موضوع التريجر انا حاسس انو كتير مهم بهاي الحالة لانو الانظمة التانية ما بقدر اتتدخل بالكود تاعها بس بقدر اعطيها صلاحية على الجدول اللي عندي عشان يضيفو عليه اسم جديد .

بتمنا انو يكون عندك حل باستخدام التريجر .

و كمان مرة شكرا للتعاون.

M . O . H . ' . D. . . . . . . .G . H . A . L . I . B

e-mail : mumado99@hotmail.com

select * from dbo.my_friends where friend_desc in ('loyal','faithful','dedicated') order by priority_value

#4

أخى جرب هذا

GO
CREATE TRIGGER   tr_std ON  std  AFTER  INSERT
AS    
INSERT INTO  std_exams
(std_exam,std_id,exam_id ) 
SELECT Inserted.std_id + exams.exam_id ,Inserted.std_id, exams.exam_id   
FROM Inserted inner join exams
where std.specialization_code = exams.specialization_code

ملحوظه ليس لدى خبره كبيره فى sql

 وممّا زادنـــي شرفــاً وتيهــاً   **  وكدت بأخمصي أطأ الثريّا

دخولي تحت قولك يا عبادي  **   وأن صيّرت أحمد لي نبيّـاً

#5
-- =============================================
-- Author: Imad Ozone		
-- Create date: 5-1-2010
-- Description:	Trigger For Your Eyes
-- =============================================
CREATE TRIGGER dbo.trSTD_AfterInsert 
   ON  dbo.STD 
   AFTER INSERT
AS 

	SET NOCOUNT ON;

	Declare 	
		@STD_ID int ,
		@STD_Name Nvarchar(100),
		@Specialization_Code Nvarchar(100)

	Select @STD_ID, @STD_Name, @Specialization_Code
	From Inserted

	Insert STD_Exams( STD_Exam, STD_ID, Exam_ID )
		Select
			Cast(@STD_ID AS Nvarchar(100)) + Cast(Exam_ID  AS Nvarchar(100)),  
			@STD_ID, 
			Exam_ID 
		From Exams                         
		Where Specialization_Code = @Specialization_Code  

GO

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

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