ورود

View Full Version : کار نکردن تریگر



programmer755
شنبه 29 فروردین 1394, 15:52 عصر
سلام دوستان
به نظرتون چرا تریگر من کار نمیکنه ؟
CREATE TRIGGER UpdateNumberOfComment
ON Comment
AFTER UPDATE
AS


BEGIN
declare @NewArticleId int
set @NewArticleId=(select ArticleID from inserted)
update Article set
CountOfComment = (CountOfComment+1)
where Article.ID=@NewArticleId


-- Insert statements for trigger here


END
GO

با این تریگر میخوام وقتی نظری در جدول comment تایید شد به تعداد نظرات در جدول Article یک واحد اضافه بشه

SabaSabouhi
شنبه 29 فروردین 1394, 16:32 عصر
سلام دوستان
به نظرتون چرا تریگر من کار نمیکنه ؟
CREATE TRIGGER UpdateNumberOfComment
ON Comment
AFTER UPDATE
AS


BEGIN
declare @NewArticleId int
set @NewArticleId=(select ArticleID from inserted)
update Article set
CountOfComment = (CountOfComment+1)
where Article.ID=@NewArticleId


-- Insert statements for trigger here


END
GO

با این تریگر میخوام وقتی نظری در جدول comment تایید شد به تعداد نظرات در جدول Article یک واحد اضافه بشه

سلام
راستش نمی‌دونم چرا کار نمی‌کنه، اما یه اشکال مهم داری.
اگه توی تریگر از متغیر استفاده کنی، وقتی که یک به‌روز رسانی چندتایی داشته باشی، قطعاً درست کار نمی‌کنه.
سعی کن به هیچ عنوان توی تریگر از متغیر استفاده نکنی.
بجای این کدی که نوشتی به‌تره بنویسی:


UPDATE Article
SET CountOfComment = Cnt
FROM Article A
JOIN ( SELECT ArticleId, Cnt = COUNT(*)
FROM Comment c
JOIN Inserted i on i.ArticleId = c.ArticleId
GROUP BY ArticleId ) T ON T.ArticleId = A.Id



به این شکل مشکل به‌روز رسانی چندتایی نخواهی داشت. این رو امتحان کن شاید مشکل تریگرت رو هم حل کرد.

صبا صبوحی

programmer755
شنبه 29 فروردین 1394, 17:09 عصر
ممنونم از راهنمایی شما
اما من به روز رسانی چندتایی ندارم
فقط یه فیلد رو میخوام آپدیت کنم
اونم فیلدی که وقتی مدیر سایت اون نظر رو تایید کنه و اون نظر بتونه نمایش داده بشه
تریگرم رو اینطوری هم نوشتم اما جواب نگرفتم
CREATE TRIGGER UpdateNumberOfComment
ON Comment
AFTER UPDATE
AS
if UPDATE(Allow)
BEGIN
declare @NewArticleId int
set @NewArticleId=(select ArticleID from inserted)
update Article set
CountOfComment = (CountOfComment+1)
where Article.ID=@NewArticleId


-- Insert statements for trigger here


END
GO