Discuz!NT官方社区

首页 » Discuz!NT交流与讨论 » BUG 反馈 » 不能删除帖子的问题
ybnews - 2008-8-13 22:02:00
未能找到存储过程 'bbs_deletetopicbytidlist'。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 未能找到存储过程 'bbs_deletetopicbytidlist'。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
ybnews - 2008-8-13 22:07:00
结果早有帖搞定了,就在后台运行SQL语句就OK.

CREATE PROCEDURE [dnt_deletetopicbytidlist]

        @tidlist AS VARCHAR(2000),
        @posttablename AS VARCHAR(20),
        @chanageposts AS BIT

AS

        DECLARE @postcount int
        DECLARE @topiccount int
        DECLARE @todaycount int
        DECLARE @sqlstr nvarchar(4000)
        DECLARE @fid varchar(2000)
        DECLARE @posterid varchar(200)
        DECLARE @tempFid int
        DECLARE @tempPosterid int
        DECLARE @tempLayer int
        DECLARE @temppostdatetime datetime

        DECLARE @tempfidlist AS VARCHAR(1000)       

        SET @fid = ''
        SET @posterid = ''
        SET @postcount=0
        SET @topiccount=0
        SET @todaycount=0
       
        SET @tempfidlist = '';


        IF @tidlist<>''
                BEGIN
                        SET @sqlstr = 'DECLARE cu_dnt_posts CURSOR FOR SELECT [fid],[posterid],[layer],[postdatetime] FROM [' + @posttablename + '] WHERE [tid] IN (' + @tidlist + ')'
                        EXEC (@sqlstr)
                        OPEN cu_dnt_posts
                        FETCH NEXT FROM cu_dnt_posts into @tempFid,@tempPosterid,@tempLayer,@temppostdatetime
                        WHILE @@FETCH_STATUS = 0
                                BEGIN
                                        SET @postcount = @postcount + 1
                                        IF @tempLayer = 0
                                                BEGIN
                                                        SET @topiccount = @topiccount + 1
                                                       
                                                END

                                        IF DATEDIFF(d,@temppostdatetime,GETDATE()) = 0
                                                BEGIN
                                                        SET @todaycount = @todaycount + 1
                                                END


                                        IF CHARINDEX(',' + LTRIM(STR(@tempFid)) + ',',@fid + ',') = 0
                                                BEGIN
                                                        --SET @fid = @fid + ',' + LTRIM(STR(@tempFid))       
                                                        SELECT @tempfidlist = ISNULL([parentidlist],'') FROM [dnt_forums] WHERE [fid] = @tempFid
                                                        IF RTRIM(@tempfidlist)<>''
                                                                BEGIN
                                                                        SET @fid = RTRIM(@fid) + ',' +  RTRIM(@tempfidlist) + ',' + CAST(@tempFid AS VARCHAR(10))
                                                                END
                                                        ELSE
                                                                BEGIN
                                                                        SET @fid =RTRIM(@fid) + ',' +  CAST(@tempFid AS VARCHAR(10))
                                                                END

                                       
                                                END
                                        IF @chanageposts = 1
                                                BEGIN
                                                        UPDATE [dnt_users] SET [posts] = [posts] - 1 WHERE [uid] = @tempPosterid
                                                END
                               
                                        FETCH NEXT FROM cu_dnt_posts into @tempFid,@tempPosterid,@tempLayer,@temppostdatetime
                                END

                        CLOSE cu_dnt_posts
                        DEALLOCATE cu_dnt_posts

       
                        IF LEN(@fid)>0
                                BEGIN       

                       
                                        SET @fid = SUBSTRING(@fid,2,LEN(@fid)-1)
               
                                        IF @chanageposts = 1
                                                BEGIN
               
                                                        UPDATE [dnt_statistics] SET [totaltopic]=[totaltopic] - @topiccount, [totalpost]=[totalpost] - @postcount

                                                        SET @sqlstr = 'UPDATE [dnt_forums] SET [posts]=[posts] - ' +  cast(@postcount AS VARCHAR(10))  +
                                                                                        ', [topics]=[topics] - ' + cast(@topiccount AS VARCHAR(10)) +
                                                                                        ', [todayposts] = [todayposts] - ' + cast(@todaycount AS VARCHAR(10)) +
                                                                        ' WHERE [fid] IN (' + @fid + ')'
                                                        EXEC (@sqlstr)
                                                END
               
                                        SET @sqlstr = 'DELETE FROM [dnt_favorites] WHERE [tid] IN (' + @tidlist + ')'
                                        EXEC (@sqlstr)
                                       
                                        SET @sqlstr = 'DELETE FROM [dnt_polls] WHERE [tid] IN (' + @tidlist + ')'
                                        EXEC (@sqlstr)

                                        SET @sqlstr = 'DELETE FROM [' + @posttablename + '] WHERE [tid] IN (' + @tidlist + ')'
                                        EXEC (@sqlstr)

                                        SET @sqlstr = 'DELETE FROM [dnt_mytopics] WHERE [tid] IN (' + @tidlist + ')'
                                        EXEC(@sqlstr)
                               
                                END
                        SET @sqlstr = 'DELETE FROM [dnt_topics] WHERE [closed] IN (' + @tidlist + ') OR [tid] IN (' + @tidlist + ')'
                        EXEC (@sqlstr)
                        SET @sqlstr = 'UPDATE [dnt_tags] SET [count]=[count]-1, [fcount]=[fcount]-1 WHERE [tagid] IN (SELECT [tagid] FROM [dnt_topictags] WHERE [tid] IN (' + @tidlist + '))'
                        EXEC (@sqlstr)
                        SET @sqlstr = 'DELETE FROM [dnt_topictags] WHERE [tid] IN (' + @tidlist + ')'
                        EXEC (@sqlstr)
                        SET @sqlstr = 'DELETE FROM [dnt_topictagcaches] WHERE [tid] IN (' + @tidlist + ') OR [linktid] IN (' + @tidlist + ')'
                END
1
查看完整版本: 不能删除帖子的问题