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

كيف يمكن منع التعديل

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

كيف يمكن انشاء تريجر منع التعديل فى جدول بناء على قيمة مسترجعة من جدول اخر

بفرض لدينا جدولين

T1 ,T2

T1 يشمل حقول ID,Serial

T2 يشمل حقول ID,A,B,C,D

والسؤال

كيف عمل تريجر عند التعيديل فى جدول T2 يقرأ الرقم الموجود فى T1 فى حقل Serial بناء على تساوى ال Id

كانت تكتب فى اكسس كما يلى

DLookup("serial","T1","id=id

وعند الرجوع بالرقم نختبر قيمته اذا كان =2 فيلغى التعديل الذى تم على الحقل

#2

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

إليك أخي الكريم هذا المثال :)

use tempdb
go

Create Table T1(Id int, Serial Nvarchar(50))
Create Table T2(Id int, A Varchar(50), B Varchar(50))

go

-- some data for test

Insert T1 Select 1, 'A'
Insert T1 Select 2, 'B'
Insert T1 Select 3, 'C'
Insert T1 Select 4, 'D'

Insert T2 Select 1, 'data A1', ' data B1'
Insert T2 Select 2, 'data A2', ' data B2'
Insert T2 Select 3, 'data A3', ' data B3'
Insert T2 Select 4, 'data A4', ' data B4'
Insert T2 Select 5, 'data A5', ' data B5'
Insert T2 Select 6, 'data A6', ' data B6'

go

-- Creating the trigger
Create Trigger trT2_For
	On T2
	-- here u can say for update only like this: For Update
	For Update, Insert

AS

	if Exists( Select * From Inserted A Inner Join T1 On A.Id = T1.Id 
		Where T1.Serial = 'B' )  
	rollback Tran

GO


-- try to change the data in T2
Update T2 Set A = 'new value for A column', B = ' new value for B column'
	Where Id = 2

-- see that the data has not changed
Select * From T2

بالتوفيق

1

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

كل الشكر للتكرم بالرد

جارى التجريب

لماذا سألنا عن وجدود السجل او عدمه فى جمله If

if Exists( Select * From Inserted A Inner Join T1 On A.Id = T1.Id

Where T1.Serial = 'B' )

هل يمكن الرجوع بالقيمة المناظرة اى الموجوده فى serial

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

#4

لتعرف ما حدث ببساطة حلل معي الـ Script أخي الكريم :

Inserted : هو جدول يحوي ما أرسلته للجدول من سجلات للتعديل .. قد تقوم بتعديل أكثر من سجل في عبارة واحدة .. أو حتى حشر أكثر من سجل دفعة واحدة ..

و عبارة الـ Exists ستعيد true إذا تحقق الشرط الذي طلبته أنت بالمقارنة مع الجدول الآخر ..

و بالتالي => rollback

... طبعا يمكتك استخدام مؤشر يدل على سجلات الجدول Inserted لتفحص كل قيمة على حدا مع القيمة في الجدول T1 بناء على الشرط الذي تريده ..

أما بالنسبة لسؤالك عن اعادة القيمة .. فلم أفهمه .. كون الـ Trigger سينفذ في الـ Background بشكل اتوماتيكي و لن تستدعيه بنفسك مثل ما تفعل مع الـ Stored Procedure

بالتوفيق

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة 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

#5

شكرا للتكرم بالرد

ما اقصده

هو عند التعديل فى السجل الذى id =5 مثلا فى جدول T2

ما هى الجملة التى يمكن كتابتها حتى يمكننى معرفة قيمة Serial الموجوده امام id=5 فى جدول T1

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