Davood_amega
یک شنبه 17 مرداد 1389, 17: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 بیایید .
قبل از هرچیز 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 بیایید .