PDA

View Full Version : یه سوال در مورد تریگرها



project80888
دوشنبه 28 آذر 1390, 10:00 صبح
سلام دوستان
من دوتا جدول دارم
یک جدول دومی ا دارای کلید خارجی است که کلید اصلیش تو جدول اوله
که همانطور که میدونید با حذف کلید اصلی در جدول اولی کلیه کلیدهای خارجی جدول دومی حذف میشه
مشکل من اینه که نیاز دارم یه تریگر برای جدول دومی بنویسم که موقع حذف یه رکورد یک سری عملیات انجام بده که تریگر واسه این کار نوشتم اما وقتی رکورد اصلی در جدول یک حذفش می کنم کلیه رکوردهای وابسته در جدول دومی نیز حذف میشه ولی تریگر Delete اصلا کار نمیکنه؟
Alter Trigger ForUpdateStatMatAfterDel
on dbo.tbl_Requestdetail
After Delete
as
Begin
''عملیات
جدول tbl_Requestdetail جدول دومی است که کلید خارجی داره

project80888
دوشنبه 28 آذر 1390, 11:15 صبح
یه چیزی هایی متوجه شدم با استفاده از
cursor
فکر کنم مشکلم حل بشه

baktash.n81@gmail.com
دوشنبه 28 آذر 1390, 11:41 صبح
سلام

من اینکارو انجام دادم و مشکلی نداشت اما وقتی مجموعه رکورد رو حذف می کنیم Trigger فقط یک بار اجرا میشه ... میشه یکم بیشتر توضیح بدی ... ؟! یا نمونه DB تو بفرستی ...

project80888
دوشنبه 28 آذر 1390, 12:04 عصر
آره مشکل من همینه فقط روی رکورد اولی جواب میده
حالا آمدم از یه کرسر توی همین تریگر حذف استفاده کردم وکلیه رکوردهای حذف شده ار داخل کرسر ریختم
و سپس عملیات لازم روش انجام دادم
ممنون
اینه کدش
ALTER TRIGGER [dbo].[UpdateStateMatAfterDelete]
ON [dbo].[tbl_Requestdetail]
For DELETE
AS
BEGIN
Declare @RqdetRq_Code Numeric
Declare @RqClassCID Numeric

Declare cur cursor for Select Rqdet_Rq_Code,Rq_Class_CID From Deleted
Open Cur
Fetch Next From Cur Into @RqdetRq_Code,@RqClassCID
While @@Fetch_Status =0
Begin
--------------------------------------------------------
Declare @StMatSmOldcode Numeric
SELECT @StMatSmOldcode=[StMat_Sm_Oldcode]
FROM [tbL_StatusofMat]
Where [StMat_Cl_id]=@RqClassCID and [Rq_Code]=@RqdetRq_Code
------------------------------------------------------------------
UPDATE [dbo].[tbl_class] SET [c_sm_code] =@StMatSmOldcode
WHERE [C_Bdt_Id]=@RqClassCID
-------------------------------------------------------------------
Fetch Next From Cur Into @RqdetRq_Code
End
Close Cur
Deallocate Cur
END

Mahdad999
جمعه 19 اسفند 1390, 13:10 عصر
سلام،
من توی T-SQL زیاد حرفه ای نیستم ولی تا جایی که من از سوال شما متوجه شدم میدونم یکی از خواص استفاده primary و foreign key بالا بردن ضریب امنیت جداول مثل این هستش که تا وقتی یک فیلد در جدول اول دارای زیر مجموعه در جدول دوم هست نتونید فیلد جدول رو del کنید. پس قاعدتا منطقیش اینه که اول فیلدهایی که دارای id مورد نظر در جدول اول هستن رو باید از جدول دوم حذف کنید بعد برید سراغ جدول اول.
//
از اساتید سایت هم میخوام که اگر غیر از اینه ما رو به راه راست هدایت کنن