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

استفسار في triggers

بدأه versace في 8 أكتوبر 2011 · 5 رد · 902 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الاستفسار الأول :

أرجو المساعده بالحصول على

triggers ينفذ إذا حاول أحد المستخدمين الإضافة على الجدول Employees

بحيث يعيد هذا الـ Trigger رسالة خطأ إذا تمت إضافة أكثر من صف (Row)

في نفس الوقت و يتم التراجع عن عملية الإضافة التي تمت.

ومن يوجد عنده أمثلة مختلفة عن triggers أرجو أن يضعها لنستفيد منها...

الاستفسار الثاني :

مالهدف من nocount ؟؟

عندما نضيفها في trigger ونضع قيمتها ON,OFF

مثل: SET NOCOUNT ON

ولكم جزيل الشكر..

تم تعديل هذه المشاركة بواسطة versace في 8 أكتوبر 2011 في 02:07

#2

هذا هو

CREATE TRIGGER employee_rows
ON employee
FOR INSERT 
AS
declare @count int
SET NOCOUNT ON
select @count =Count(*) from inserted 

if @count> 1 
begin 
 RAISERROR ('You must insert on row', 16, 1)
   ROLLBACK TRANSACTION

end

2- بشكل عام

SET NOCOUNT ON

هي لعدم اظهار عدد الصفوف التي تم العمل عليها ولاننا هنا نعمل في trigger فلا نريد ان تظهر للمستخدم .

على سبيل المثال

شغل SSMS واعمل insert على جدول ُEmployee مرة بوجودها ومرة اخرى بعدم وجودها طبعا باعادة انشاء التريجر وستلاحظ عند عدم استخدامها سيتم كتابة rows affected اكثر من مرة .

#3

السلام عليكم ...

نظم إدارة قواعد البيانات لا تسمح إلا بعمل Insert لسطر واحد بنفس الوقت ... حتى لو أرسلنا له عدة أسطر Rows يقوم بعمل insert لها سطر سطر ثم ينفذ الــ Trigger ثم السطر الثاني ثم الــ Trigger ... و هكذا .... بدليل أنني جربت الكود التالي :

 declare @i int 
SET @i = 0 
while (@i < 100) 
begin 
insert into employee ([Name]) values ('HHH'); 
SEt @i = @i + 1;
 end
  GO

و قام بالتنفيذ دون رفع الخطأ ..

تعديل بعد مشاركة الأخ TareqVB :

الفكرة التي كنت أريد إيصالها أن نظام إدارة قواعد البيانات العلائقية relational DBMS تقوم بإدراج الــ Records .. سطر .. سطر .في ملفات البيانات .. لأنه هناك قيود Constraints على الحقول ... فلا يتم تثبت السطر إلا إذا حقق القيود ... و بالنسبة لموضوع الــ Triggers فكلام الأخ TareqVB صحيح ... حيث أن Sql Server يوجد فيه جدول افتراضي اسمه Inserted ... يضع فيه البيانات التي عملنا لها Insert ثم ينفذ الــ Trigger ...مرة واحدة من أجل كل البيانات طالما انها بعبارة Insert واحدة أما المثال الذي كتبته فهو ينفذ عبارة الــ Insert الواحدة مئة مرة ...

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 8 أكتوبر 2011 في 20:05

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4
اقتباس
بدليل أنني جربت الكود التالي :

المثال لايستخدم كدليل لاثبات نظرية وانما يستخدم لنفي نظرية :)

لذا جرب

insert into employee select * from employee2
#5

السلام عليكم ...

اقتباس
المثال لايستخدم كدليل لاثبات نظرية وانما يستخدم لنفي نظرية

بارك الله بك أخي ..

كلامك صحيح و انا جربت المثال ...

و أحيطك علما أنه تم تعديل مشاركتي .... كي لا تصل معلومات خاطئة للأعضاء ...

و التعديل هو :

اقتباس
الفكرة التي كنت أريد إيصالها أن نظام إدارة قواعد البيانات العلائقية relational DBMS تقوم بإدراج الــ Records .. سطر .. سطر .في ملفات البيانات .. لأنه هناك قيود Constraints على الحقول ... فلا يتم تثبت السطر إلا إذا حقق القيود ... و بالنسبة لموضوع الــ Triggers فكلام الأخ TareqVB صحيح ... حيث أن Sql Server يوجد فيه جدول افتراضي اسمه Inserted ... يضع فيه البيانات التي عملنا لها Insert ثم ينفذ الــ Trigger ...مرة واحدة من أجل كل البيانات طالما انها بعبارة Insert واحدة أما المثال الذي كتبته فهو ينفذ عبارة الــ Insert الواحدة مئة مرة ...

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

جزاكم الله خير حميعا افدتموني :)

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