Here is a script we had lying around that we have used in the past. I have not checked this recently but I believe it should handle everything you need. One important note about this is it basically is doing what Chris H recommended but in addition to that the forum thread/post counts are being updated.
DECLARE @FROMForumID integer
DECLARE @TOForumID integer
DECLARE @ForumGroupID integer
DECLARE @FROMForumName nvarchar(200)
DECLARE @TOForumName nvarchar(200)
DECLARE @Threads integer
DECLARE @Posts integer
SET @ForumGroupID = 1 -- Your Forum's Group ID
SET @FROMForumID = 1 -- Forum to Eliminate
SET @TOForumID = 2 -- Forum to Consolidate to
SET XACT_ABORT ON
SET ARITHABORT ON
SET NOCOUNT ON
-- Get FROM Forum Information
SELECT @FromForumName = [Name] FROM Forum_Forums WHERE ForumID = @FROMForumID
SELECT @ToForumName = [Name] FROM Forum_Forums WHERE ForumID = @TOForumID
-- If no forum is found, erroneous data was supplied
IF (@FromForumName) IS NULL
BEGIN
PRINT 'Forum Id [' + CAST(@FROMForumID AS varchar(10)) + '] was not found.'
GOTO Skip
END
IF (@TOForumName) IS NULL
BEGIN
PRINT 'Forum Id [' + CAST(@FROMForumID AS varchar(10)) + '] was not found.'
GOTO Skip
END
PRINT 'Moving FROM: [' + (@FROMForumName) + '].'
PRINT 'Moving TO : [' + (@TOForumName) + '].'
SELECT @Threads = TotalThreads, @Posts = TotalPosts
FROM forum_forums
WHERE ForumID = @FROMForumID
PRINT 'Current FROM Counts [Threads/Posts] : [' + CAST(@Threads AS varchar(5)) + ' / ' + CAST(@Posts AS varchar(5)) + '].'
SELECT @Threads = TotalThreads, @Posts = TotalPosts
FROM forum_forums
WHERE ForumID = @TOForumID
PRINT 'Current TO Counts [Threads/Posts] : [' + CAST(@Threads AS varchar(5)) + ' / ' + CAST(@Posts AS varchar(5)) + '].'
SELECT @Threads = Count(*) FROM forum_threads WHERE ForumID = @TOForumID
SELECT @Posts = Count(*) FROM forum_posts WHERE ThreadID IN (SELECT ThreadID from forum_threads where ForumID = @TOForumID) AND IsApproved=1
PRINT 'Actual Counts [Threads/Posts] : [' + CAST(@Threads AS varchar(5)) + ' / ' + CAST(@Posts AS varchar(5)) + '].'
BEGIN TRAN
UPDATE forum_threads
SET ForumID = @TOForumID
WHERE ForumID = @FROMForumID
SELECT @Threads = Count(*) FROM forum_threads WHERE ForumID = @TOForumID
SELECT @Posts = Count(*) FROM forum_posts WHERE ThreadID IN (SELECT ThreadID from forum_threads where ForumID = @TOForumID) AND IsApproved=1
PRINT 'New Counts [Threads/Posts] : [' + CAST(@Threads AS varchar(5)) + ' / ' + CAST(@Posts AS varchar(5)) + '].'
UPDATE forum_forums
SET TotalPosts = @Posts, TotalThreads = @Threads, GroupId = @ForumGroupId
WHERE forumid = @TOForumID
UPDATE forum_forums
SET TotalPosts = 0, TotalThreads = 0, IsActive = 0
WHERE ForumId = @FROMForumID
COMMIT TRAN