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