View Full Version : مشکل در trigger
z.nasiri
سه شنبه 12 خرداد 1388, 14:10 عصر
سلام
من توی برنامه ام 2 نا جدول دارم که رابطه آنها یک به یک در نتیجه می بایست به محض وارد کردن primerykey جدول اول با یک trigger این مقدار به جدول دوم نیز منتقل بشه و علاوه بر مقدار primrykey سایر مقادیر مشخص شده هم منتقل بشهو من برای این خواسته ام یک trigger نوشته ام Eror هم نداره اما اجرای ئرستی ندارم و انتقال اطلاعات انجام نمی شه
[code]create trigger t1 on gharardad1
for update
as
update gharardad2
set primerykeygharardad1=primerykey gharardad2,
field1=feild2
where primerykey2=(select primerykey1 from updated) [/code
حمیدرضاصادقیان
سه شنبه 12 خرداد 1388, 15:28 عصر
سلام دوست عزیز.اولا به جای for update باید از for insert استفاده کنید.چون شما دارید به جدولتون رکورد اضافه میکنید.دوما دستور داخل تریگر نیز باید insert باشه.باتوجه به توضیحات خودتون ظاهرا رکورد در جدول دوم وجود نداره و میخواهید وقتی در جدول اول اضافه شد در جدول دوم اضافه بشه که باید از insert استفاده گنید.یک راه حل دیگه اینکه به جای استفاده از تریگر که روی بازدهی جداول شما تاثیر میذاره اینه که بهتره اینکارو داخل یک SP انجام بدید.و کل دستورات رو به صورت یک transaction بنویسید که یا هردوش اضافه بشه یا هیچکدوم اضافه نشه. سرباری هم که تریگر داره این نداره.
sp هم میتونید به شکل زیر بنویسید
create proc insertdb @fields int as
begin tran
insert into table1 values(@fields)
Insert into table2 values( @fields)
If @@error=0 Then
commit tran
Else
rollback.
موفق باشید
z.nasiri
سه شنبه 12 خرداد 1388, 19:24 عصر
سلام
ممنون از پاسخی که دادید،اما من نیاز به update دارم چون می بایست هر تغییری که به جدول اول من اعمال میشه توی جدول دوم هم بیبینم برای این حالت هم هنوز پیشنهاد استفاده از sp را می کنید؟
لطفا بیشتر راهنماییم کنید.
با تشکر
a.maleki
سه شنبه 12 خرداد 1388, 20:34 عصر
دوست عزیز آیا درجدول اول شما مقادیری وجود داره که با Update می خواهید کار کنید اگر وجود نداره از همئن روشی که دوست عزیزمون آقای حمیدرضاصادقیان فرمودند بهتر استفاده کنید
حمیدرضاصادقیان
چهارشنبه 13 خرداد 1388, 00:10 صبح
دوست عزیزم سلام. برای update هم میتونی از همین روشی که گفتم استفاده کنی. شاید این سوال براتون مطرح بشه که تریگر این وسط به چه کاری میاد. تریگر رو زمانی میتوانید استفاده کنید که فرضا به جای update یا delete یک حرکت دیگه ای رخ بده. البته برای اینکار ها هم مناسبه. ولی مناسبتر اینه زمانی که شما میتوانید بدون استفاده از تریگر کارتون رو انجام بدید بهتره اینکارو نکنید. ولی زمانی که مجبور به استفاده از تریگر شدید واقعا راهی وجود نداره.چون سربار خیلی زیادی رو دیتابیس شما داره و اگر با sql profiler برای مدتی لاگ دیتابیس خودتون رو مشاهده کنید میبینید چه حرکتی داره میکنه. که ممکنه در داخل شبکه و تعداد کاربران زیاد مشکلاتی رو ایجاد کنه.
موفق باشید.
z.nasiri
پنج شنبه 21 خرداد 1388, 11:43 صبح
سلام
ممنون از راهنمایی که کردید.
اما من هنوز مشکل دارم چون هم کلی eror داد این sp بعد از رفع eror هم کاری که می خواستم را انجام نداد.برای خودم به لحاظ منطقی این sp درسته اما کار نمی کنه
لطفا بیشتر راهنمایی کنید، اگر امکان داره یک نمونه که توی برنامه خودتون استفاده کردید را بگذارید
z.nasiri
پنج شنبه 21 خرداد 1388, 11:45 صبح
در مورد این سوال
دوست عزیز آیا درجدول اول شما مقادیری وجود داره که با Update می خواهید کار کنید اگر وجود نداره از همئن روشی که دوست عزیزمون آقای حمیدرضاصادقیان فرمودند بهتر استفاده کنید
باید عرض کنم بله
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.