8efe030f47
为收敛当前分支代码范围并统一人员服务目录,移除历史模块与静态资源,减少无效代码和目录分散带来的维护成本。
245 lines
7.4 KiB
Transact-SQL
245 lines
7.4 KiB
Transact-SQL
/*
|
|
陕化建施工管理系统历史模块清理脚本
|
|
目标库:SGGLDB_SHJ
|
|
|
|
删除范围:
|
|
1. PHTGL(项目合同/投标管理)专属表
|
|
2. ZHGL(综合管理)专属表
|
|
|
|
明确保留:
|
|
1. HTGL 人员 API 对应代码不属于本脚本处理范围
|
|
2. WBS 表
|
|
3. 焊接共用施工日志表:
|
|
ZHGL_ConstructionLog
|
|
ZHGL_ConstructionLogMachine
|
|
ZHGL_ConstructionLogPerson
|
|
ZHGL_ConstructionLogWorkEfficiency
|
|
|
|
说明:
|
|
- 数据库已由用户提前备份,本脚本不再执行备份。
|
|
- 脚本会先删除所有涉及待删表的外键,再删除待删表。
|
|
- 脚本可重复执行;已经不存在的目标表会跳过。
|
|
- 数据库中未发现独立 JDGL_* 业务表;JDGL 进度数据使用 WBS 表,因此不删除 WBS。
|
|
- PHTGL、JDGL、PZHGL 菜单及权限由已确认的 CQMS 清理脚本按菜单类型清理;本脚本只处理业务表。
|
|
- 本脚本不删除历史日志表。
|
|
*/
|
|
|
|
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 @DropTables TABLE
|
|
(
|
|
TableName sysname NOT NULL PRIMARY KEY
|
|
);
|
|
|
|
INSERT INTO @DropTables (TableName)
|
|
VALUES
|
|
(N'PHTGL_ActionPlanFormation'),
|
|
(N'PHTGL_ActionPlanFormation_Sch1'),
|
|
(N'PHTGL_ActionPlanReview'),
|
|
(N'PHTGL_Approve'),
|
|
(N'PHTGL_Approve_TEST'),
|
|
(N'PHTGL_AttachUrl'),
|
|
(N'PHTGL_AttachUrl1'),
|
|
(N'PHTGL_AttachUrl10'),
|
|
(N'PHTGL_AttachUrl10_HumanInput'),
|
|
(N'PHTGL_AttachUrl10_MachineInput'),
|
|
(N'PHTGL_AttachUrl11'),
|
|
(N'PHTGL_AttachUrl12'),
|
|
(N'PHTGL_AttachUrl13'),
|
|
(N'PHTGL_AttachUrl14'),
|
|
(N'PHTGL_AttachUrl15_Sch1'),
|
|
(N'PHTGL_AttachUrl15_Sch2'),
|
|
(N'PHTGL_AttachUrl15_Sch3'),
|
|
(N'PHTGL_AttachUrl15_Sch4'),
|
|
(N'PHTGL_AttachUrl18'),
|
|
(N'PHTGL_AttachUrl19'),
|
|
(N'PHTGL_AttachUrl2'),
|
|
(N'PHTGL_AttachUrl20'),
|
|
(N'PHTGL_AttachUrl2Detail'),
|
|
(N'PHTGL_AttachUrl3'),
|
|
(N'PHTGL_AttachUrl4'),
|
|
(N'PHTGL_AttachUrl5'),
|
|
(N'PHTGL_AttachUrl5_DevicePrice'),
|
|
(N'PHTGL_AttachUrl5_MaterialsPrice'),
|
|
(N'PHTGL_AttachUrl6'),
|
|
(N'PHTGL_AttachUrl7'),
|
|
(N'PHTGL_AttachUrl8'),
|
|
(N'PHTGL_AttachUrl9_SubPerson'),
|
|
(N'PHTGL_AttachUrl9_SubStaffing'),
|
|
(N'PHTGL_BidApproveUserReview'),
|
|
(N'PHTGL_BidApproveUserReview_Sch1'),
|
|
(N'PHTGL_BidDocumentsReview'),
|
|
(N'PHTGL_BidDocumentsStandingBook'),
|
|
(N'PHTGL_BidProjectQuantity'),
|
|
(N'PHTGL_Contract'),
|
|
(N'PHTGL_ContractReview'),
|
|
(N'PHTGL_ContractStandingBook'),
|
|
(N'PHTGL_ContractTrack'),
|
|
(N'PHTGL_ContractTrackMatchWBS'),
|
|
(N'PHTGL_ContractTrackProgress'),
|
|
(N'PHTGL_Invoice'),
|
|
(N'PHTGL_InvoiceDetail'),
|
|
(N'PHTGL_MainProjectQuantity'),
|
|
(N'PHTGL_Quantity'),
|
|
(N'PHTGL_SetSubReview'),
|
|
(N'PHTGL_SetSubReview_Sch1'),
|
|
(N'PHTGL_SetSubReview_Sch2'),
|
|
(N'PHTGL_SpecialTermsConditions'),
|
|
(N'PHTGL_SubcontractAgreement'),
|
|
(N'ZHGL_ConstructionLogHJGL'),
|
|
(N'ZHGL_ConstructionLogManagement'),
|
|
(N'ZHGL_ConstructionLogProblem'),
|
|
(N'ZHGL_ConstructionLogRecord'),
|
|
(N'ZHGL_ConstructionLogWorkEfficiencyCompany'),
|
|
(N'ZHGL_ConstructionLogWorkEfficiencyMonth'),
|
|
(N'ZHGL_ConstructionLogWorkEfficiencyProject'),
|
|
(N'ZHGL_ConstructionMonthReport'),
|
|
(N'ZHGL_ConstructionMonthReportMainCost'),
|
|
(N'ZHGL_ConstructionMonthReportSubCost'),
|
|
(N'ZHGL_ConstructionPlan'),
|
|
(N'ZHGL_ConstructionPlanApprove'),
|
|
(N'ZHGL_ConstructionReport'),
|
|
(N'ZHGL_ConstructionReportApprove'),
|
|
(N'ZHGL_ProjectConstructionLog'),
|
|
(N'ZHGL_WorkHandover'),
|
|
(N'ZHGL_WorkHandoverApprove'),
|
|
(N'ZHGL_WorkHandoverDetail');
|
|
|
|
DECLARE @KeepTables TABLE
|
|
(
|
|
TableName sysname NOT NULL PRIMARY KEY
|
|
);
|
|
|
|
INSERT INTO @KeepTables (TableName)
|
|
VALUES
|
|
(N'ZHGL_ConstructionLog'),
|
|
(N'ZHGL_ConstructionLogMachine'),
|
|
(N'ZHGL_ConstructionLogPerson'),
|
|
(N'ZHGL_ConstructionLogWorkEfficiency'),
|
|
(N'WBS_ControlItemInit'),
|
|
(N'WBS_ControlItemProject'),
|
|
(N'WBS_UnitWork'),
|
|
(N'WBS_WorkPackageInit'),
|
|
(N'WBS_WorkPackageProject');
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM @KeepTables k
|
|
LEFT JOIN sys.tables t
|
|
ON t.schema_id = SCHEMA_ID(N'dbo')
|
|
AND t.name = k.TableName
|
|
WHERE t.object_id IS NULL
|
|
)
|
|
BEGIN
|
|
SELECT k.TableName AS MissingKeepTable
|
|
FROM @KeepTables k
|
|
LEFT JOIN sys.tables t
|
|
ON t.schema_id = SCHEMA_ID(N'dbo')
|
|
AND t.name = k.TableName
|
|
WHERE t.object_id IS NULL;
|
|
|
|
RAISERROR(N'存在需要保留但当前数据库中不存在的表,已停止执行。', 16, 1);
|
|
RETURN;
|
|
END;
|
|
|
|
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;
|
|
|
|
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(N'dbo') + 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;
|
|
|
|
COMMIT TRANSACTION;
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF XACT_STATE() <> 0
|
|
ROLLBACK TRANSACTION;
|
|
THROW;
|
|
END CATCH;
|
|
|
|
/* 执行后核验:目标表为 0,保留表仍存在。 */
|
|
SELECT N'RemainingTargetTables' 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'RetainedWeldingTables' AS Metric, COUNT(*) AS Value
|
|
FROM sys.tables t
|
|
JOIN @KeepTables k ON k.TableName = t.name
|
|
WHERE t.schema_id = SCHEMA_ID(N'dbo')
|
|
AND k.TableName LIKE N'ZHGL[_]%';
|
|
|
|
SELECT N'WBS_ControlItemInit' AS Metric, COUNT_BIG(*) AS Value FROM dbo.WBS_ControlItemInit
|
|
UNION ALL SELECT N'WBS_ControlItemProject', COUNT_BIG(*) FROM dbo.WBS_ControlItemProject
|
|
UNION ALL SELECT N'WBS_UnitWork', COUNT_BIG(*) FROM dbo.WBS_UnitWork
|
|
UNION ALL SELECT N'WBS_WorkPackageInit', COUNT_BIG(*) FROM dbo.WBS_WorkPackageInit
|
|
UNION ALL SELECT N'WBS_WorkPackageProject', COUNT_BIG(*) FROM dbo.WBS_WorkPackageProject;
|
|
|
|
SELECT
|
|
fk.name AS ForeignKeyName,
|
|
OBJECT_SCHEMA_NAME(fk.parent_object_id) AS ParentSchema,
|
|
OBJECT_NAME(fk.parent_object_id) AS ParentTable,
|
|
OBJECT_SCHEMA_NAME(fk.referenced_object_id) AS ReferencedSchema,
|
|
OBJECT_NAME(fk.referenced_object_id) AS ReferencedTable
|
|
FROM sys.foreign_keys fk
|
|
WHERE fk.parent_object_id IN
|
|
(
|
|
SELECT t.object_id
|
|
FROM sys.tables t
|
|
JOIN @KeepTables k ON k.TableName = t.name
|
|
WHERE t.schema_id = SCHEMA_ID(N'dbo')
|
|
AND k.TableName LIKE N'ZHGL[_]%'
|
|
)
|
|
ORDER BY ParentTable, ForeignKeyName;
|