TR_DiscussionPosts_Insert
Definition
Copy
CREATE TRIGGER [TR_DiscussionPosts_Insert] on dbo.[DiscussionPosts]
FOR INSERT
AS
begin
set nocount on
declare @ReplyToID integer
declare @PostDate datetime
declare @Reply integer
declare @MaxSeq integer
declare @IndentLevel integer
declare @TopicID integer
select @Reply = 0
select @ReplyToID = ReplyToID from inserted
select @PostDate = PostDate from inserted
select @TopicID = TopicID from inserted
if @ReplyToID is not null
begin
select @Reply = 1
select @IndentLevel = (select IndentLevel + 1 from DiscussionPosts where ID=@ReplyToID)
if @IndentLevel = 1
select @MaxSeq = (select max(sequence) from DiscussionPosts where TopicID = @TopicID) + 1
else
begin
-- Find the sequence of the last sibling
select @MaxSeq = coalesce(min(sequence),(select sequence+1 from DiscussionPosts where id=@ReplyToID)) from DiscussionPosts where TopicID=@TopicID
and IndentLevel<= (select IndentLevel from DiscussionPosts where id=@ReplyToID)
and sequence > (select sequence from DiscussionPosts where id=@ReplyToID)
update DiscussionPosts set sequence = sequence + 1 where TopicID = @TopicID and sequence >= @MaxSeq
end
update DiscussionPosts set
DiscussionPosts.IndentLevel=@IndentLevel,
DiscussionPosts.Sequence = @MaxSeq
from DiscussionPosts inner join inserted on DiscussionPosts.ID = inserted.ID
Where DiscussionPosts.IndentLevel = 0
end
update DiscussionTopics set
DiscussionTopics.Replies = DiscussionTopics.Replies + @Reply, DiscussionTopics.LastPostDate = @PostDate
from DiscussionTopics inner join inserted on DiscussionTopics.ID = inserted.TopicID
end