195 lines
6.3 KiB
Transact-SQL
195 lines
6.3 KiB
Transact-SQL
-- ==========================================
|
||
-- 消息系统重构数据迁移脚本
|
||
-- 执行时间:建议在业务低峰期执行
|
||
-- 注意:此脚本会删除关注消息数据,不考虑历史数据
|
||
-- ==========================================
|
||
|
||
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 '事务已提交';
|
||
|