Files
SGGL_SHJ/SGGL/Database/20260916_CQMS_Cleanup_Candidates.sql
T
lpf 8efe030f47 refactor: 清理旧模块资源并整理人员服务目录
为收敛当前分支代码范围并统一人员服务目录,移除历史模块与静态资源,减少无效代码和目录分散带来的维护成本。
2026-09-19 13:45:38 +08:00

416 lines
16 KiB
Transact-SQL

/*
CQMS 首批确认清理执行脚本
目标库:SGGLDB_SHJ
已确认删除:
- 综合管理:综合交底、图纸会审、设计明细、检试验人员/设备、特设质保体系
- 质量计划:总包/分包质量计划、技术方案评审
- 施工方案:CQMS 专属施工方案及审批
- 不合格项联系单、质量奖惩、质量培训、质量样板
- 项目现场亮点、质量报表、CQMS 质量会议、QC 小组注册
- 材料试验、施工试验、告知和监检、CQMS 设备台账
- 上述模块专属基础字典及项目级汇总表
明确保留:
- CQMS 人员管理(含 HTGL 人员 API)
- CQMS WBS 及其 Check_CheckControl、Check_SpotCheck 相关表
- 焊接相关数据及共享的 Material_Material、Material_Inspection、Material_InspectionApprove
- Check_CheckEquipment 检试验设备、Technical_TechnicalDisclose 技术交底
- HSSE 施工方案、HSSE 培训、HSSE 安全会议
- 旧版 WebService 仍使用的 Information_QuarterlyProjectQuality
- CQMSData_CQMS、Project_CQMSData_CQMS 等共享统计表
说明:
- 数据库已由用户提前备份,本脚本不再执行备份。
- @ExecuteCleanup 已按用户确认设置为 1,执行前仍会校验数据库名和保护表。
- 脚本会在同一事务中删除目标外键、目标表及精确菜单权限记录,可重复执行。
- 不删除 WBS、人员、焊接共享表,也不删除 Sys_Button 定义。
*/
USE [SGGLDB_SHJ];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF DB_NAME() <> N'SGGLDB_SHJ'
BEGIN
RAISERROR(N'当前数据库不是 SGGLDB_SHJ,已停止执行。', 16, 1);
RETURN;
END;
DECLARE @ExecuteCleanup bit = 1;
DECLARE @DropTables TABLE
(
TableName sysname NOT NULL PRIMARY KEY,
CleanupGroup nvarchar(100) NOT NULL
);
INSERT INTO @DropTables (TableName, CleanupGroup)
VALUES
(N'Base_CompanyModel', N'质量样板'),
(N'Base_CompanyModelKind', N'质量样板'),
(N'Base_ConstructionTestType', N'施工试验字典'),
(N'Base_NoticeAndSupervisionType', N'告知和监检字典'),
(N'Base_CQMSTrainObject', N'质量培训字典'),
(N'Base_CQMSTrainType', N'质量培训字典'),
(N'Base_ProjectHighlightsSiteType', N'项目现场亮点字典'),
(N'Base_PunishType', N'质量奖惩字典'),
(N'Base_RewardType', N'质量奖惩字典'),
(N'Comprehensive_ConTechnologyDisclosure', N'综合管理'),
(N'Comprehensive_DesignDetails', N'综合管理'),
(N'Comprehensive_DesignDetailsApprove', N'综合管理'),
(N'Comprehensive_InspectionMachine', N'综合管理'),
(N'Comprehensive_InspectionMachineApprove', N'综合管理'),
(N'Comprehensive_InspectionMachinePlan', N'综合管理'),
(N'Comprehensive_InspectionPerson', N'综合管理'),
(N'Comprehensive_InspectionPersonApprove', N'综合管理'),
(N'Comprehensive_QualityAssurance', N'综合管理'),
(N'Comprehensive_ReviewDrawings', N'综合管理'),
(N'CQMS_ProjectHighlightsSitePic', N'项目现场亮点'),
(N'InformationProject_QualityWorkSummaryReport', N'质量报表'),
(N'InformationProject_QuarterlyProjectQuality', N'质量报表'),
(N'Material_ConstructionTest', N'施工试验'),
(N'Material_Equipment', N'设备台账'),
(N'Material_MaterialTest', N'材料试验'),
(N'Material_NoticeAndSupervision', N'告知和监检'),
(N'Meeting_CQMSMeeting', N'质量会议'),
(N'Meeting_CQMSMeetingApprove', N'质量会议'),
(N'Model_QualityModel', N'质量样板'),
(N'Plan_MainPlan', N'质量计划'),
(N'Plan_MainPlanApprove', N'质量计划'),
(N'Plan_SubPlan', N'质量计划'),
(N'Plan_SubPlanApprove', N'质量计划'),
(N'Plan_TechnicalProposalReview', N'质量计划'),
(N'QCManage_QCGroupRegistration', N'QC 活动'),
(N'RewardAndPunish_RewardAndPunish', N'质量奖惩'),
(N'RewardAndPunish_RewardAndPunishApprove', N'质量奖惩'),
(N'Solution_CQMSConstructSolution', N'施工方案'),
(N'Solution_CQMSConstructSolutionApprove', N'施工方案'),
(N'Train_TrainPlan', N'质量培训'),
(N'Unqualified_WorkContact', N'不合格项联系单'),
(N'Unqualified_WorkContactApprove', N'不合格项联系单');
DECLARE @MenuIds TABLE
(
MenuId nvarchar(100) NOT NULL PRIMARY KEY,
MenuName nvarchar(100) NOT NULL
);
/* 只保留从当前菜单 XML 中核对过的目标节点,不按名称模糊删除。 */
INSERT INTO @MenuIds (MenuId, MenuName)
VALUES
(N'34A3DBD0-1472-4D99-B2A4-21F0AF3227BD', N'质量计划'),
(N'02970CE5-1A63-4DED-83B2-B283E7E68A1F', N'总包施工质量计划'),
(N'68DA6E87-1016-4225-AA80-117E788EEE9B', N'分包施工质量计划'),
(N'D438ADBD-5A1C-44F5-A6D7-E4270469DE0F', N'项目技术方案评审'),
(N'C9E75EEC-6A93-4313-89EB-E24E05CAC4F1', N'设备信息'),
(N'F07ADB87-F2B4-4D31-A38C-3EC4F32F08C4', N'试验检验管理'),
(N'DA501F39-86A4-4315-9D3B-1E341DE75B9D', N'材料试验'),
(N'3AE88614-052D-413D-ACC3-190CEB195F90', N'施工试验'),
(N'88822AAB-A13F-4ECA-B2ED-592321CDB173', N'告知和监检管理'),
(N'2C49EC5E-BF6F-4C44-BA02-9BD183CF68C6', N'特设质保体系'),
(N'09887155-4DEF-4B9A-A15A-0CE8DE81B75A', N'质量培训'),
(N'E73622CA-1520-4A79-A355-81C08C60A08D', N'培训计划'),
(N'C062AD89-3C3A-4DA1-AB8A-53E2BD5E5D2D', N'培训记录'),
(N'BBBF69F1-9520-4E0A-B0C0-9F4D3FBF4C10', N'施工方案管理'),
(N'91C4BFDB-0A51-4992-99CC-EB4EC185593D', N'施工方案'),
(N'A16CFA9D-2783-4573-95F9-EBA2B682B7EA', N'施工技术交底管理'),
(N'856D53B3-C5FB-443F-917B-39E83BE685DB', N'图纸会审管理'),
(N'5708024C-CD74-42CD-839C-2E4FD83D1897', N'QC管理'),
(N'8B1DFB6D-B48C-4FAB-821F-25AD582DBFAB', N'QC小组注册'),
(N'B1D48FD8-F44A-46DD-AB9F-6D431365F6D1', N'QC统计'),
(N'53A5EF93-F0F0-4416-A5F8-1AEC37C0C622', N'质量会议'),
(N'CB0754F9-55D3-4AA3-8E8D-82F11884DAB7', N'质量月例会'),
(N'31A86992-5FB9-4525-AE97-E2E9E28FACE8', N'质量专题会'),
(N'AB393E2F-7CC9-4ED2-AD32-202A961ED45D', N'项目现场亮点'),
(N'D81AE7C1-2022-4089-B0F9-49903798DEEF', N'项目现场亮点照片'),
(N'42106F55-BE3A-4252-8D4D-0793E4777524', N'项目现场亮点'),
(N'67F04484-EC26-49AA-BFB4-6CF5DB06F8CA', N'项目现场亮点类型'),
(N'38177E89-4BA8-4D66-AFB9-93644DFE7451', N'项目现场亮点照片'),
(N'3156A9F0-276D-4AD4-BF84-45CF6DFC215C', N'企业安全数据统计月报'),
(N'4BC71D2E-7D94-48C1-A61A-139637825AA5', N'职工伤亡事故原因分析报'),
(N'7985C759-8EB9-4B7D-AC65-00541280B46C', N'应急演练开展情况季报'),
(N'70DEB27A-D6FF-4D57-879B-0270F2967FA0', N'应急演练工作计划半年报'),
(N'AAC7C263-6E25-49DC-985B-DC3FA7AAF3A1', N'实业安全简报'),
(N'07FEEC9D-09C1-4C19-9269-62F69532086C', N'安全管理工作总结报告'),
(N'CF9C1F00-34B8-42E5-B2D1-704094169CA3', N'季度工程项目质量信息表'),
(N'12941594-2171-411A-8CC8-32E3BD9FCDDF', N'质量管理工作总结报告'),
(N'5B344750-79DD-40AA-8AA7-34B04E41FA72', N'生态环保工作总结报告'),
(N'CB76394B-BDEB-4F45-9D19-F38612DC6591', N'安全生产治本攻坚三年行动工作台账'),
(N'C48087A8-4C9F-485D-B0A4-C85E112BA705', N'安全生产管理评价工作调度台账'),
(N'76E236DA-DDFC-4CE8-8CB8-02F8A27A8535', N'专业技术方案评审'),
(N'B9ADD006-BA46-4191-BCD1-CCB56767C82B', N'总包施工质量计划'),
(N'6F9F1B71-67D8-4297-8F9B-360F3695E84B', N'项目策划'),
(N'D36E568B-54A3-4E86-919E-407C605B7BFC', N'总包合同'),
(N'0E6C41F0-3231-4030-BCBC-0872E7C41383', N'项目技术方案评审'),
(N'35BA8E89-4575-4A3F-9C22-98B323E67DA1', N'重点工程项目质量专项整治行动开展情况台账'),
(N'2539A5CE-E209-4A16-A9B7-4C43E4E3CBEC', N'进度文件柜'),
(N'F596EC1A-71A3-4B34-B36C-68628F2F42FE', N'合同文件柜'),
(N'BA383490-BAE3-4E65-B221-8F89D2431135', N'质量奖惩'),
(N'81053EAB-09C6-4A6B-A952-B756071EE0DA', N'质量奖励处罚'),
(N'7ecf0229-8a0b-40ce-8b04-e556f7bd3394', N'质量报表管理'),
(N'1443C901-A9C3-4CCC-B858-55512DE8C5CA', N'质量管理工作总结报告'),
(N'267064F1-88F7-4468-998A-49A1A2F25BB8', N'季度工程项目质量信息表'),
(N'F54EABD2-4242-4A5D-9154-680E02E9F466', N'质量样板管理'),
(N'B44EC915-7854-4F06-8C87-CD5FF41E3AC0', N'质量样板'),
(N'B9CE4D86-4A6E-42B2-8736-15595B3C57FC', N'质量月例会'),
(N'9F7C7E64-2743-4CF0-B09E-DDB43444A69A', N'质量专题会'),
(N'F32B7E91-693F-4892-93EE-7AEAC1309291', N'施工组织设计(施工方案)内部审批流转单'),
(N'0BA0735E-2EFE-4E31-B7DD-A62E5F1E7BBD', N'施工试验类型定义'),
(N'CCD45D20-EA3F-47E7-8176-AB085778539E', N'告知和监检类型定义'),
(N'B9372A07-8A93-4EC0-9374-FDE1ED958DAE', N'公司质量样板类别'),
(N'99C99DF8-103F-4CA4-83CB-A6C924B5A698', N'公司质量样板'),
(N'164CDCED-E794-4177-AADE-23CA8E1AA1B8', N'培训类别'),
(N'D2027C3D-ECE9-445E-8DBE-AF0DA10005FC', N'培训对象'),
(N'E20647B6-315D-483B-8E5D-4810DBECE79E', N'质量奖惩定义'),
(N'84DB3C33-8828-407B-8B8A-5E98AD610FA6', N'奖励定义'),
(N'92DF46C6-1CE4-4324-A3F2-EBC6261376AC', N'处罚定义');
DECLARE @LegacyMenuTypes TABLE
(
MenuType nvarchar(50) NOT NULL PRIMARY KEY
);
INSERT INTO @LegacyMenuTypes (MenuType)
VALUES
(N'Menu_HTGL'),
(N'Menu_JDGL'),
(N'Menu_PHTGL'),
(N'Menu_PZHGL');
DECLARE @LegacyMenuIds TABLE
(
MenuId nvarchar(100) NOT NULL PRIMARY KEY
);
INSERT INTO @LegacyMenuIds (MenuId)
SELECT m.MenuId
FROM dbo.Sys_Menu m
JOIN @LegacyMenuTypes t
ON t.MenuType = m.MenuType;
DECLARE @ProtectedTables TABLE
(
TableName sysname NOT NULL PRIMARY KEY,
ProtectionNote nvarchar(200) NOT NULL
);
INSERT INTO @ProtectedTables (TableName, ProtectionNote)
VALUES
(N'Person_Persons', N'人员管理及 HTGL 人员 API'),
(N'SitePerson_Person', N'人员管理'),
(N'Check_CheckControl', N'WBS 质量问题及控制点'),
(N'Check_CheckControlApprove', N'WBS 质量问题审批'),
(N'Check_CheckEquipment', N'共享检试验设备'),
(N'Check_CheckEquipmentApprove', N'共享检试验设备审批'),
(N'Check_SpotCheck', N'WBS 实体验收'),
(N'Check_SpotCheckApprove', N'WBS 实体验收审批'),
(N'Check_SpotCheckDetail', N'WBS 实体验收明细'),
(N'Check_CheckMonth', N'质量月报及焊接数据'),
(N'Check_MonthNDTCheck', N'焊接月报'),
(N'Check_MonthWelder', N'焊接月报'),
(N'Technical_TechnicalDisclose', N'保留技术交底'),
(N'Material_Material', N'焊接共享物料'),
(N'Material_Inspection', N'焊接共享检验'),
(N'Material_InspectionApprove', N'焊接共享检验审批'),
(N'Project_FileCabinet', N'共享文件柜'),
(N'CQMSData_CQMS', N'共享 CQMS 汇总'),
(N'Project_CQMSData_CQMS', N'共享项目 CQMS 汇总');
/* 执行前打印目标表数据量及保护对象状态。 */
SELECT
d.CleanupGroup,
d.TableName,
CASE WHEN t.object_id IS NULL THEN N'不存在/已清理' ELSE N'待删除' END AS TableStatus,
COALESCE(SUM(CASE WHEN p.index_id IN (0, 1) THEN p.rows ELSE 0 END), 0) AS [RowCount]
FROM @DropTables d
LEFT JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = d.TableName
LEFT JOIN sys.partitions p
ON p.object_id = t.object_id
GROUP BY d.CleanupGroup, d.TableName, t.object_id
ORDER BY d.CleanupGroup, d.TableName;
SELECT
p.TableName,
p.ProtectionNote,
CASE WHEN t.object_id IS NULL THEN N'缺失' ELSE N'存在' END AS TableStatus
FROM @ProtectedTables p
LEFT JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = p.TableName
ORDER BY p.TableName;
IF EXISTS
(
SELECT 1
FROM @ProtectedTables p
LEFT JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = p.TableName
WHERE t.object_id IS NULL
)
BEGIN
RAISERROR(N'保护表缺失,已停止执行。', 16, 1);
RETURN;
END;
IF @ExecuteCleanup = 0
BEGIN
PRINT N'当前为预览模式,未删除任何数据库对象。';
RETURN;
END;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @Sql nvarchar(max) = N'';
/* 先删除所有涉及目标表的外键,包含目标表之间和目标表指向共享表的外键。 */
SELECT @Sql = @Sql
+ N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id))
+ N'.' + QUOTENAME(OBJECT_NAME(fk.parent_object_id))
+ N' DROP CONSTRAINT ' + QUOTENAME(fk.name) + N';'
+ CHAR(13) + CHAR(10)
FROM sys.foreign_keys fk
WHERE EXISTS
(
SELECT 1
FROM @DropTables d
JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = d.TableName
WHERE t.object_id = fk.parent_object_id
OR t.object_id = fk.referenced_object_id
);
IF @Sql <> N''
EXEC sys.sp_executesql @Sql;
SET @Sql = N'';
/* 外键已解除后按实际存在对象删除目标表。 */
SELECT @Sql = @Sql
+ N'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(t.object_id))
+ N'.' + QUOTENAME(t.name) + N';'
+ CHAR(13) + CHAR(10)
FROM @DropTables d
JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = d.TableName;
IF @Sql <> N''
EXEC sys.sp_executesql @Sql;
/* 删除目标菜单和已确认废弃模块菜单的按钮权限、角色权限,再删除菜单行。 */
DELETE FROM dbo.Sys_ButtonPower
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
OR ButtonToMenuId IN (SELECT MenuId FROM @MenuIds)
OR MenuId IN (SELECT MenuId FROM @LegacyMenuIds)
OR ButtonToMenuId IN (SELECT MenuId FROM @LegacyMenuIds);
DECLARE @DeletedButtonPower int = @@ROWCOUNT;
DELETE FROM dbo.Sys_RolePower
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
OR MenuId IN (SELECT MenuId FROM @LegacyMenuIds);
DECLARE @DeletedRolePower int = @@ROWCOUNT;
DELETE FROM dbo.Sys_Menu
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
OR MenuType IN (SELECT MenuType FROM @LegacyMenuTypes);
DECLARE @DeletedMenus int = @@ROWCOUNT;
COMMIT TRANSACTION;
SELECT
@DeletedButtonPower AS DeletedSysButtonPower,
@DeletedRolePower AS DeletedSysRolePower,
@DeletedMenus AS DeletedSysMenu;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
/* 执行后核验目标表、菜单及保护表。 */
SELECT
d.TableName,
CASE WHEN t.object_id IS NULL THEN N'已删除/不存在' ELSE N'仍存在' END AS CleanupStatus
FROM @DropTables d
LEFT JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = d.TableName
ORDER BY d.TableName;
SELECT
p.TableName,
CASE WHEN t.object_id IS NULL THEN N'缺失' ELSE N'仍存在' END AS ProtectionStatus
FROM @ProtectedTables p
LEFT JOIN sys.tables t
ON t.schema_id = SCHEMA_ID(N'dbo')
AND t.name = p.TableName
ORDER BY p.TableName;
SELECT
N'目标表剩余数量' AS Metric,
COUNT(*) AS Value
FROM sys.tables t
JOIN @DropTables d
ON d.TableName = t.name
WHERE t.schema_id = SCHEMA_ID(N'dbo');
SELECT
N'目标菜单剩余数量' AS Metric,
COUNT(*) AS Value
FROM dbo.Sys_Menu m
JOIN @MenuIds i
ON i.MenuId = m.MenuId;
SELECT
N'废弃模块菜单剩余数量' AS Metric,
COUNT(*) AS Value
FROM dbo.Sys_Menu m
JOIN @LegacyMenuTypes t
ON t.MenuType = m.MenuType;
SELECT
N'WBS表数量' AS Metric,
COUNT(*) AS Value
FROM sys.tables
WHERE schema_id = SCHEMA_ID(N'dbo')
AND name LIKE N'WBS[_]%';
SELECT
TableName,
SUM([RowCount]) AS [RowCount]
FROM
(
SELECT
t.name AS TableName,
CASE WHEN p.index_id IN (0, 1) THEN p.rows ELSE 0 END AS [RowCount]
FROM sys.tables t
LEFT JOIN sys.partitions p
ON p.object_id = t.object_id
WHERE t.schema_id = SCHEMA_ID(N'dbo')
AND t.name IN
(
N'WBS_ControlItemInit',
N'WBS_ControlItemProject',
N'WBS_UnitWork',
N'WBS_WorkPackageInit',
N'WBS_WorkPackageProject',
N'Material_Material',
N'Material_Inspection',
N'Person_Persons'
)
) AS ProtectedData
GROUP BY TableName
ORDER BY TableName;