live-forum/server/webapi/LiveForum/DatabaseScripts/RefactorMessages.sql
2026-03-24 11:27:37 +08:00

195 lines
6.3 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ==========================================
-- 消息系统重构数据迁移脚本
-- 执行时间:建议在业务低峰期执行
-- 注意:此脚本会删除关注消息数据,不考虑历史数据
-- ==========================================
BEGIN TRANSACTION;
-- 步骤1备份现有数据可选建议执行
PRINT '==========================================';
PRINT '步骤1备份现有消息数据...';
PRINT '==========================================';
IF OBJECT_ID('T_Messages_Backup_BeforeRefactor', 'U') IS NOT NULL
BEGIN
DROP TABLE T_Messages_Backup_BeforeRefactor;
PRINT '已删除旧的备份表';
END
SELECT * INTO T_Messages_Backup_BeforeRefactor FROM T_Messages;
PRINT '备份完成备份表T_Messages_Backup_BeforeRefactor';
PRINT '';
-- 步骤2删除关注消息MessageType = 3
PRINT '==========================================';
PRINT '步骤2删除关注消息MessageType = 3...';
PRINT '==========================================';
DECLARE @DeletedFollowCount INT;
SELECT @DeletedFollowCount = COUNT(*) FROM T_Messages WHERE MessageType = 3;
PRINT '待删除关注消息数量:' + CAST(@DeletedFollowCount AS NVARCHAR(10));
DELETE FROM T_Messages WHERE MessageType = 3;
PRINT '已删除关注消息';
PRINT '';
-- 步骤3调整系统通知类型4 → 3
PRINT '==========================================';
PRINT '步骤3调整系统通知类型4 → 3...';
PRINT '==========================================';
DECLARE @SystemNotificationCount INT;
SELECT @SystemNotificationCount = COUNT(*) FROM T_Messages WHERE MessageType = 4;
PRINT '待调整系统通知数量:' + CAST(@SystemNotificationCount AS NVARCHAR(10));
UPDATE T_Messages SET MessageType = 3 WHERE MessageType = 4;
PRINT '已将系统通知类型从 4 调整为 3';
PRINT '';
-- 步骤4增加"我的评论内容"字段
PRINT '==========================================';
PRINT '步骤4增加 MyCommentContent 字段...';
PRINT '==========================================';
IF NOT EXISTS (
SELECT * FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.T_Messages')
AND name = 'MyCommentContent'
)
BEGIN
ALTER TABLE T_Messages
ADD MyCommentContent NVARCHAR(MAX) NULL;
PRINT '已添加 MyCommentContent 字段NVARCHAR(MAX) NULL';
-- 添加字段注释
EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = N'我的评论内容(回复消息展示被回复的内容)',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T_Messages',
@level2type = N'COLUMN', @level2name = N'MyCommentContent';
PRINT '已添加字段注释';
END
ELSE
BEGIN
PRINT 'MyCommentContent 字段已存在,跳过添加';
END
PRINT '';
-- 步骤5更新字段注释
PRINT '==========================================';
PRINT '步骤5更新字段注释...';
PRINT '==========================================';
-- 更新 MessageType 字段注释
IF EXISTS (
SELECT * FROM sys.extended_properties
WHERE major_id = OBJECT_ID('dbo.T_Messages')
AND name = 'MS_Description'
AND minor_id = (SELECT column_id FROM sys.columns WHERE object_id = OBJECT_ID('dbo.T_Messages') AND name = 'MessageType')
)
BEGIN
EXEC sp_updateextendedproperty
@name = N'MS_Description',
@value = N'消息类型1-回复消息2-点赞消息含送花3-系统消息',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T_Messages',
@level2type = N'COLUMN', @level2name = N'MessageType';
PRINT '已更新 MessageType 字段注释';
END
ELSE
BEGIN
EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = N'消息类型1-回复消息2-点赞消息含送花3-系统消息',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T_Messages',
@level2type = N'COLUMN', @level2name = N'MessageType';
PRINT '已添加 MessageType 字段注释';
END
-- 更新 ContentType 字段注释
IF EXISTS (
SELECT * FROM sys.extended_properties
WHERE major_id = OBJECT_ID('dbo.T_Messages')
AND name = 'MS_Description'
AND minor_id = (SELECT column_id FROM sys.columns WHERE object_id = OBJECT_ID('dbo.T_Messages') AND name = 'ContentType')
)
BEGIN
EXEC sp_updateextendedproperty
@name = N'MS_Description',
@value = N'内容类型1-帖子2-评论3-送花',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T_Messages',
@level2type = N'COLUMN', @level2name = N'ContentType';
PRINT '已更新 ContentType 字段注释';
END
ELSE
BEGIN
EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = N'内容类型1-帖子2-评论3-送花',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T_Messages',
@level2type = N'COLUMN', @level2name = N'ContentType';
PRINT '已添加 ContentType 字段注释';
END
PRINT '';
-- 步骤6验证结果
PRINT '==========================================';
PRINT '步骤6验证迁移结果...';
PRINT '==========================================';
PRINT '当前消息类型统计:';
SELECT
MessageType,
CASE MessageType
WHEN 1 THEN '回复消息'
WHEN 2 THEN '点赞消息'
WHEN 3 THEN '系统消息'
ELSE '未知类型'
END AS TypeName,
COUNT(*) as Count
FROM T_Messages
GROUP BY MessageType
ORDER BY MessageType;
PRINT '';
PRINT '内容类型统计:';
SELECT
ContentType,
CASE ContentType
WHEN 0 THEN '无内容'
WHEN 1 THEN '帖子'
WHEN 2 THEN '评论'
WHEN 3 THEN '送花'
ELSE '其他'
END AS TypeName,
COUNT(*) as Count
FROM T_Messages
GROUP BY ContentType
ORDER BY ContentType;
PRINT '';
PRINT '==========================================';
PRINT '数据迁移完成!';
PRINT '==========================================';
PRINT '';
PRINT '提示:';
PRINT '1. 请在应用层清理 Redis 队列DEL message:events:follow';
PRINT '2. 如需回滚,可从备份表 T_Messages_Backup_BeforeRefactor 恢复';
PRINT '3. 备份表可在确认无误后手动删除';
PRINT '';
COMMIT TRANSACTION;
PRINT '事务已提交';