8efe030f47
为收敛当前分支代码范围并统一人员服务目录,移除历史模块与静态资源,减少无效代码和目录分散带来的维护成本。
335 lines
9.6 KiB
Transact-SQL
335 lines
9.6 KiB
Transact-SQL
/*
|
|
SHIYE、DCGL、DataShow 第二批清理执行脚本
|
|
目标库:SGGLDB_SHJ
|
|
|
|
已确认删除:
|
|
- SHIYE 实业安全简报
|
|
- DCGL 集团督查检查、检查通知单、检查整改及重点项目整改台账
|
|
- 上述模块对应的视图、菜单权限和业务数据表
|
|
- DataShow 页面已从 FineUIPro.Web 删除;其 CQMS 专属表和菜单已在首批脚本中处理
|
|
|
|
明确保留:
|
|
- Person_Persons 人员管理及 HTGL 人员 API
|
|
- WBS_* 表
|
|
- 焊接业务及共享的 Material_Material、Material_Inspection、Material_InspectionApprove
|
|
|
|
说明:
|
|
- 数据库已由用户提前备份,本脚本不再执行备份。
|
|
- @ExecuteCleanup 已按用户确认设置为 1,执行前仍会校验数据库名和保护对象。
|
|
- 脚本会在同一事务中删除目标外键、视图、表及精确菜单权限记录,可重复执行。
|
|
- 不删除 Sys_Button 定义,也不删除人员、WBS 和焊接共享表。
|
|
*/
|
|
|
|
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'Information_SafetyBriefing', N'SHIYE 实业安全简报'),
|
|
(N'InformationProject_SafetyBriefing', N'SHIYE 实业安全简报'),
|
|
(N'DCGL_Check_CheckInfo', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Check_CheckInfo_CheckFile', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Check_CheckInfo_CheckTeam', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Check_CheckInfo_TableNoticeItem', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Check_CheckRectify', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Check_CheckRectifyItem', N'DCGL 集团督查检查'),
|
|
(N'DCGL_Report_KeyProjectRectificationSituationLedger', N'DCGL 集团督查检查');
|
|
|
|
DECLARE @DropViews TABLE
|
|
(
|
|
ViewName sysname NOT NULL PRIMARY KEY,
|
|
CleanupGroup nvarchar(100) NOT NULL
|
|
);
|
|
|
|
INSERT INTO @DropViews (ViewName, CleanupGroup)
|
|
VALUES
|
|
(N'View_DCGL_CheckRectifyListFromSUB', N'DCGL 集团督查检查'),
|
|
(N'View_DCGLKeyProjectRectificationSituationLedger', N'DCGL 集团督查检查');
|
|
|
|
DECLARE @MenuIds TABLE
|
|
(
|
|
MenuId nvarchar(100) NOT NULL PRIMARY KEY,
|
|
MenuName nvarchar(100) NOT NULL
|
|
);
|
|
|
|
/* 只删除已从当前菜单 XML 核对过的 SHIYE/DCGL 节点,旧孤立节点不存在时自动跳过。 */
|
|
INSERT INTO @MenuIds (MenuId, MenuName)
|
|
VALUES
|
|
(N'86F71934-7149-470E-BEAB-FFDC5BF3C0F2', N'实业安全简报'),
|
|
(N'AAC7C263-6E25-49DC-985B-DC3FA7AAF3A1', N'旧实业安全简报节点'),
|
|
(N'8B9C0F42-D36F-4798-94AB-F56723E8B714', N'集团督查检查'),
|
|
(N'15443DE9-4AC2-43F9-A622-9F9253ECB157', N'督查检查通知单'),
|
|
(N'2E4A3E58-44B7-41B0-BFE3-634DF29AAE27', N'集团下发督查检查整改'),
|
|
(N'35BA8E89-4575-4A3F-9C22-98B323E67DA1', N'重点工程项目质量专项整治行动开展情况台账');
|
|
|
|
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'Material_Material', N'焊接库存共享物料'),
|
|
(N'Material_Inspection', N'焊接库存共享检验'),
|
|
(N'Material_InspectionApprove', N'焊接共享检验审批');
|
|
|
|
/* 执行前打印目标对象及保护对象状态。 */
|
|
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
|
|
v.CleanupGroup,
|
|
v.ViewName,
|
|
CASE WHEN o.object_id IS NULL THEN N'不存在/已清理' ELSE N'待删除' END AS ViewStatus
|
|
FROM @DropViews v
|
|
LEFT JOIN sys.views o
|
|
ON o.schema_id = SCHEMA_ID(N'dbo')
|
|
AND o.name = v.ViewName
|
|
ORDER BY v.CleanupGroup, v.ViewName;
|
|
|
|
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;
|
|
|
|
SELECT
|
|
N'WBS 表数量' AS Metric,
|
|
COUNT(*) AS Value
|
|
FROM sys.tables
|
|
WHERE schema_id = SCHEMA_ID(N'dbo')
|
|
AND name LIKE N'WBS[_]%';
|
|
|
|
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 NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.tables
|
|
WHERE schema_id = SCHEMA_ID(N'dbo')
|
|
AND name LIKE N'WBS[_]%'
|
|
)
|
|
BEGIN
|
|
RAISERROR(N'WBS 表缺失,已停止执行。', 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 VIEW ' + QUOTENAME(OBJECT_SCHEMA_NAME(v.object_id))
|
|
+ N'.' + QUOTENAME(v.name) + N';'
|
|
+ CHAR(13) + CHAR(10)
|
|
FROM @DropViews d
|
|
JOIN sys.views v
|
|
ON v.schema_id = SCHEMA_ID(N'dbo')
|
|
AND v.name = d.ViewName;
|
|
|
|
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;
|
|
|
|
/* 删除目标菜单和对应按钮/角色权限,不删除 Sys_Button 定义。 */
|
|
DELETE FROM dbo.Sys_ButtonPower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
|
|
OR ButtonToMenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
DECLARE @DeletedButtonPower int = @@ROWCOUNT;
|
|
|
|
DELETE FROM dbo.Sys_RolePower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
DECLARE @DeletedRolePower int = @@ROWCOUNT;
|
|
|
|
DELETE FROM dbo.Sys_Menu
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
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
|
|
d.ViewName,
|
|
CASE WHEN v.object_id IS NULL THEN N'已删除/不存在' ELSE N'仍存在' END AS CleanupStatus
|
|
FROM @DropViews d
|
|
LEFT JOIN sys.views v
|
|
ON v.schema_id = SCHEMA_ID(N'dbo')
|
|
AND v.name = d.ViewName
|
|
ORDER BY d.ViewName;
|
|
|
|
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 sys.views v
|
|
JOIN @DropViews d
|
|
ON d.ViewName = v.name
|
|
WHERE v.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'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'Person_Persons',
|
|
N'Material_Material',
|
|
N'Material_Inspection',
|
|
N'Material_InspectionApprove'
|
|
)
|
|
) AS ProtectedData
|
|
GROUP BY TableName
|
|
ORDER BY TableName;
|