📄 cs_moderate_thread_merge.prc
字号:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cs_Moderate_Thread_Merge]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[cs_Moderate_Thread_Merge]
GO
CREATE PROCEDURE [dbo].cs_Moderate_Thread_Merge
(
@ParentThreadID int,
@ChildThreadID int,
@JoinBy int,
@SettingsID int
)
AS
SET Transaction Isolation Level Read UNCOMMITTED
DECLARE @ParentSectionID int
DECLARE @LastPostInParent int
DECLARE @PostLevelInParent int
DECLARE @SortOrderInParent int
DECLARE @ChildSectionID int
DECLARE @FirstPostInChild int
DECLARE @PostLevelInChild int
DECLARE @SortOrderInChild int
DECLARE @LastPostInChild int
-- Check to ensure we can perform this opertation
IF ((SELECT ThreadID FROM cs_Threads WHERE ThreadID = @ChildThreadID and SettingsID = @SettingsID) = @ParentThreadID)
RETURN
-- Get details on the parent thread
SELECT TOP 1
@ParentSectionID = SectionID,
@LastPostInParent = PostID,
@PostLevelInParent = PostLevel,
@SortOrderInParent = SortOrder
FROM
cs_Posts
WHERE
ThreadID = @ParentThreadID and SettingsID = @SettingsID
ORDER BY
SortOrder DESC
-- Get details on the child thread
SELECT TOP 1
@ChildSectionID = SectionID,
@FirstPostInChild = PostID,
@PostLevelInChild = PostLevel,
@SortOrderInChild = SortOrder
FROM
cs_Posts
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- don't know why this is here
-- Get the last post in the child thread
--SELECT
-- @LastPostInChild = MostRecentPostID
--FROM
-- cs_Threads
--WHERE
-- ThreadID = @ChildThreadID
BEGIN TRAN
-- this is now done in the cs_system_UpdateThread sproc
-- Update the PostLevel and SortOrder for the Child posts before merging
--UPDATE
-- cs_Posts
--SET
-- PostLevel = PostLevel + @PostLevelInParent
--WHERE
-- ThreadID = @ChildThreadID
--
--UPDATE
-- cs_Posts
--SET
-- SortOrder = SortOrder + @SortOrderInParent
--WHERE
-- ThreadID = @ChildThreadID
-- Approve the post
UPDATE
cs_Posts
SET
IsApproved = 1
WHERE
PostID = @FirstPostInChild AND SettingsID = @SettingsID
-- Do the Updates
UPDATE
cs_PostAttachments
SET
SectionID = @ParentSectionID
WHERE
PostID IN (SELECT PostID FROM cs_Posts WHERE ThreadID = @ChildThreadID AND SettingsID = @SettingsID)
UPDATE
cs_Posts
SET
ThreadID = @ParentThreadID,
SectionID = @ParentSectionID,
PostLevel = PostLevel + @PostLevelInParent,
SortOrder = SortOrder + @SortOrderInParent,
ParentID = @LastPostInParent
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- Now delete all of the old thread info
DELETE FROM
cs_SearchBarrel
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- Delete all thread tracking data.
DELETE FROM
cs_TrackedThreads
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- Cleanup ThreadsRead
DELETE
cs_ThreadsRead
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- Delete the child thread
DELETE
cs_Threads
WHERE
ThreadID = @ChildThreadID and SettingsID = @SettingsID
-- Update thread statistics
EXEC cs_system_UpdateThread @ParentThreadID, 0, @SettingsID
-- Update forum statistics
EXEC cs_system_UpdateForum @ParentSectionID, @ParentThreadID, @LastPostInParent, @SettingsID
EXEC cs_system_ResetForumStatistics @ChildSectionID
-- Update moderation actions
EXEC cs_system_ModerationAction_AuditEntry 7, @JoinBy, @ChildThreadID, null, null, @SettingsID, null
COMMIT TRAN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
grant execute on [dbo].[cs_Moderate_Thread_Merge] to public
go
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -