PDA

View Full Version : مشکل در ایجاد تریگر برای Insert در جدول



ALI_REZA_6
یک شنبه 29 آبان 1390, 15:33 عصر
سلام
یه جدول به نام TempOrder با فیلد های کدکه کلیداست(TOID)، کدکالا(PID) و کد مشتری(CID) و تعداد(Amount) دارم که از آن برای نمایش اطلاعات سبد خرید استفاده میکنم
حالا میخوام که اگر یک مشتری زمانی که یک کالا را قبلا به سبد خریدش اضافه کرده بود، دوباره اون کالا را انتخاب کرد دوباره یک رکورد تکراری به جدوال اضافه نشه بلکه فقط فیلد تعداد اضافه بشود

من این تریگر را در Sql 2008 نوشتم برای جدول TempOrder


CREATE TRIGGER InsertInToBusket
ON dbo.TempOrder
AFTER INSERT
AS
BEGIN
declare @CustomerID int
declare @ProductID int

select @CustomerID=CID from INSERTED
select @ProductID=PID from INSERTED

UPDATE TempOrder SET Amount=Amount+1 WHERE PID=@ProductID and CID=@CustomerID


END
GO


وقتی وب سایتم اجرا میکنم زمانی که یک کالا که قبلا انتخاب شده را دوباره انتخاب میکنم
مقدار فیلد تعداد آب دیت میشه ولی یه رکورد تکراری دیگه ای هم اضافه میشه که فقط فیلد کلید جدول مقدارش فرق میکنه

مشکلش چیه؟

با تشکر

ALI_REZA_6
یک شنبه 29 آبان 1390, 16:33 عصر
کسی نیست جواب ما رو بده

یوسف زالی
یک شنبه 29 آبان 1390, 17:01 عصر
دوست من جوابتون رو در پست خصوصی که داده بودید دادم

ALI_REZA_6
یک شنبه 29 آبان 1390, 22:29 عصر
اگه من به جای After از instead of استفاده کنم مراحل آپدیت درست است ولی دیگه رکوردی جدیدی اضافه نمی شه

baktash.n81@gmail.com
دوشنبه 30 آبان 1390, 07:02 صبح
سلام
خوب شما اول عمل Insert رو انجام میدی تا Trigger اجرا بشه ... پس اول یه رکورد Insert می شه بعد یه رکورد Update میشه ... یعنی اصلا اگه Insert ی انجام نشه Update هم نخواهد بود پس روشی که انتخاب کردید مشکل منطقی داره ...

از Instead استفاده کنید بعد یه شرط بزارید که اگه وجود نداشت Insert کنه اگه بود Update کنه ... فکر می کنم این روش جواب بده ... فقط فکر می کنم

ALI_REZA_6
دوشنبه 30 آبان 1390, 07:16 صبح
سلام
خوب شما اول عمل Insert رو انجام میدی تا Trigger اجرا بشه ... پس اول یه رکورد Insert می شه بعد یه رکورد Update میشه ... یعنی اصلا اگه Insert ی انجام نشه Update هم نخواهد بود پس روشی که انتخاب کردید مشکل منطقی داره ...

از Instead استفاده کنید بعد یه شرط بزارید که اگه وجود نداشت Insert کنه اگه بود Update کنه ... فکر می کنم این روش جواب بده ... فقط فکر می کنم

خوب طریقه شرط گذاشتن چه جوریه
من نمی دونم جای علامت سوال چی باید نوشت

???=select count(*) from TempOrder WHERE PID=@ProductID and CID=@CustomerID

if ???=0 then
insert
else
Update

baktash.n81@gmail.com
سه شنبه 01 آذر 1390, 08:05 صبح
if exists ( select * from temporder where pid=@pid and cid=@cid)
update
else
insert