SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Irene
-- Create date: 2012/5/14
-- Description: TaskResponse更新資料後 維護Event.FinishCount
-- =============================================
ALTER TRIGGER [dbo].[trTaskResponse] ON [dbo].[TaskResponse]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
--控制範圍
DECLARE @statusid int;
DECLARE @eventid int;
DECLARE @memberid int;
SELECT @statusid=r.StateId, @memberid=r.MemberId, @eventid=t.EventId
FROM DELETED r INNER JOIN Task t ON r.TaskId=t.TaskId;
SELECT @statusid=r.StateId, @memberid=r.MemberId, @eventid=t.EventId
FROM INSERTED r INNER JOIN Task t ON r.TaskId=t.TaskId;
--INSERT INTO DBLog VALUES ('statusid='+cast(@statusid as varchar(5))+',memberid='+cast(@memberid as varchar(5))+',eventid='+cast(@eventid as varchar(5)));
/*
IF (@statusid<>1)
BEGIN
--INSERT INTO DBLog VALUES ('statusid='+cast(@statusid as varchar(5))+'memberid='+cast(@memberid as varchar(5))+',eventid='+cast(@eventid as varchar(5)))
RETURN;
END
*/
IF (@eventid IS NULL AND @memberid IS NULL)
BEGIN
RETURN;
END
--Event下各MemberId回報完成的Task串
SELECT MemberId
, (SELECT CAST(TaskId AS VARCHAR(10))+','
FROM [dbo].[TaskResponse]
WHERE MemberId=r.MemberId AND StateId=1 AND TaskId IN (
SELECT TaskId FROM [dbo].[Task] WHERE EventId=@eventid AND StateId=1)
ORDER BY TaskId
FOR XML PATH ('')
) AS MemberTasks
INTO #tmp
FROM [dbo].[TaskResponse] r
WHERE r.StateId=1 AND r.TaskId IN (
SELECT TaskId FROM [dbo].[Task] WHERE EventId=@eventid AND StateId=1)
GROUP BY r.MemberId;
--SELECT * FROM #tmp;
--Event下所謂Finish的Task串
DECLARE @eventtasks VARCHAR(1000);
SELECT @eventtasks=COALESCE(@eventtasks,'')+ CAST(TaskId AS VARCHAR(10))+','
FROM [dbo].[Task]
WHERE TaskId IN (SELECT TaskId FROM [dbo].[Task] WHERE EventId=@eventid AND StateId=1)
ORDER BY TaskId;
--SELECT @eventtasks;
--整理Event的FinishCount
--SELECT COUNT(*) FROM #tmp WHERE MemberTasks=@eventtasks
UPDATE [dbo].[Event] SET FinishCount=(SELECT COUNT(*) FROM #tmp WHERE MemberTasks=@eventtasks)
FROM [dbo].[Event] e
WHERE e.EventId=@eventid;
DROP TABLE #tmp;
END
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
沒有留言:
張貼留言