PDA

View Full Version : Trigger ای برای رفع مشکل Multiple Cycle



Davood_amega
یک شنبه 17 مرداد 1389, 16:22 عصر
سلام به مهندسین عزیز
قبل از هرچیز Multiple Cycle رو از روی Digram نمونه زیر توضیح می دهم .

http://www.barnamenevis.org/forum/attachment.php?attachmentid=53799&stc=1&d=1281269324


اگر بخواهیم کل ارتباطهای جداول را برای حالات Delete و Update به صورت آبشاری قرار دهیم با خطای زیر مواجه می شویم .


'T2' table saved successfully
'T3' table
- Unable to create relationship 'FK_T3_T2'.
Introducing FOREIGN KEY constraint 'FK_T3_T2' on table 'T3' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
اگه يكي از اين ارتباطات رو از حالت آبشاري خارج كنیم ديگه اين مشكل پيش نمياد. اما من ميخوام حتما اين جداول حالت آبشاري درهنگام delete و update وجود داشته باشد .
برای رفع این مشکل از یک Trigger به شکل زیر استفاده کردم .


Create Trigger Problem_Cycle on T2
After delete As
if exists(Select F2 From deleted)
begin
delete From T3 where F2=100
end این Trigger الان فقط وقتی در T2 عملیات Delete اتفاق می افتد در فیلد F2 جدول T3 اگر مقدار 100 موجود باشد حذف می شود .
سوالام اینه که چه جوری به فیلدهای جدول deleted دسترسی داشته باشیم تا هر چه در این جدول هست ، در شرط Where به جای 100 بیایید .

Davood_amega
یک شنبه 17 مرداد 1389, 17:23 عصر
مثل دفعات قبل تا تاپیک گذاشتم مشکلم برطرف کردم البته این دفعه نصفه کاره .
با کد زیر میتونید این مشکل برطرف کنید به این صورت که نام Table که کلید اصلی ارتباطتون هست را جایگزین T2 کنید .


Alter trigger tr_Delete on T2
After delete As
if exists(Select F2 From deleted)
begin
delete From T3 where F2=(Select F2 From deleted)
end

همچنان مشکل Update وجود داره . دوستان هنوز کار این تاپیک تموم نشده !