8efe030f47
为收敛当前分支代码范围并统一人员服务目录,移除历史模块与静态资源,减少无效代码和目录分散带来的维护成本。
214 lines
7.7 KiB
Transact-SQL
214 lines
7.7 KiB
Transact-SQL
/*
|
|
清理范围:已下线的 ZHGL/Information 旧报表及其数据库对象。
|
|
|
|
数据库已由用户提前备份,本脚本不重复备份。
|
|
脚本只删除已确认的 16 张旧 Information_ 表、9 个旧视图及其菜单权限残留。
|
|
|
|
明确保留:
|
|
- Information_MillionsMonthlyReport、Information_MillionsMonthlyReportItem
|
|
- View_Information_MillionsMonthlyReport、View_DataIn_MillionsMonthlyReport
|
|
- View_Project_HSSEData_HSSE 及其安全数据依赖
|
|
- InformationProject_Notice、InformationProject_Picture、
|
|
InformationProject_ProjectMap、InformationProject_ReceiveFileManager
|
|
*/
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
BEGIN TRY
|
|
BEGIN TRANSACTION;
|
|
|
|
IF DB_NAME() <> N'SGGLDB_SHJ'
|
|
BEGIN
|
|
RAISERROR(N'当前数据库不是 SGGLDB_SHJ,已停止执行。', 16, 1);
|
|
RETURN;
|
|
END;
|
|
|
|
DECLARE @DropTables TABLE
|
|
(
|
|
TableName sysname NOT NULL PRIMARY KEY,
|
|
DropOrder tinyint NOT NULL
|
|
);
|
|
|
|
INSERT INTO @DropTables (TableName, DropOrder)
|
|
VALUES
|
|
(N'Information_AccidentCauseReportItem', 1),
|
|
(N'Information_ActionWorkLedgerItem', 1),
|
|
(N'Information_DrillConductedQuarterlyReportItem', 1),
|
|
(N'Information_DrillPlanHalfYearReportItem', 1),
|
|
(N'Information_SafetyProductionEvaluationItem', 1),
|
|
(N'Information_AccidentCauseReport', 2),
|
|
(N'Information_ActionWorkLedger', 2),
|
|
(N'Information_DrillConductedQuarterlyReport', 2),
|
|
(N'Information_DrillPlanHalfYearReport', 2),
|
|
(N'Information_EPSummaryReport', 2),
|
|
(N'Information_QualityWorkSummaryReport', 2),
|
|
(N'Information_QuarterlyProjectQuality', 2),
|
|
(N'Information_SafetyProductionEvaluation', 2),
|
|
(N'Information_SafetyQuarterlyReport', 2),
|
|
(N'Information_UrgeReport', 2),
|
|
(N'Information_WorkSummaryReport', 2);
|
|
|
|
DECLARE @DropViews TABLE
|
|
(
|
|
ViewName sysname NOT NULL PRIMARY KEY
|
|
);
|
|
|
|
INSERT INTO @DropViews (ViewName)
|
|
VALUES
|
|
(N'View_Information_AccidentCauseReport'),
|
|
(N'View_Information_ActionWorkLedger'),
|
|
(N'View_Information_DrillConductedQuarterlyReport'),
|
|
(N'View_Information_DrillConductedQuarterlyReportItem'),
|
|
(N'View_Information_DrillPlanHalfYearReport'),
|
|
(N'View_Information_DrillPlanHalfYearReportItem'),
|
|
(N'View_Information_SafetyProductionEvaluation'),
|
|
(N'View_Information_SafetyQuarterlyReport'),
|
|
(N'View_DataIn_AccidentCauseReport');
|
|
|
|
DECLARE @MenuIds TABLE
|
|
(
|
|
MenuId nvarchar(100) NOT NULL PRIMARY KEY
|
|
);
|
|
|
|
INSERT INTO @MenuIds (MenuId)
|
|
VALUES
|
|
(N'4BC71D2E-7D94-48C1-A61A-139637825AA5'), -- 职工伤亡事故原因分析报表
|
|
(N'A3894BAD-3F4A-4BB4-98CF-A76C588AE53F'), -- 安全生产数据季报
|
|
(N'7985C759-8EB9-4B7D-AC65-00541280B46C'), -- 应急演练开展情况季报
|
|
(N'70DEB27A-D6FF-4D57-879B-0270F2967FA0'), -- 应急演练工作计划半年报
|
|
(N'07FEEC9D-09C1-4C19-9269-62F69532086C'), -- 安全管理工作总结报告
|
|
(N'12941594-2171-411A-8CC8-32E3BD9FCDDF'), -- 质量管理工作总结报告
|
|
(N'CF9C1F00-34B8-42E5-B2D1-704094169CA3'), -- 季度工程项目质量信息表
|
|
(N'5B344750-79DD-40AA-8AA7-34B04E41FA72'), -- 生态环保工作总结报告
|
|
(N'CB76394B-BDEB-4F45-9D19-F38612DC6591'), -- 安全生产治本攻坚三年行动工作台账
|
|
(N'C48087A8-4C9F-485D-B0A4-C85E112BA705'); -- 安全生产管理评价工作调度台账
|
|
|
|
/* 菜单已清理过,这里仅保证旧菜单及权限没有残留。 */
|
|
DELETE FROM dbo.Sys_MenuFlowOperate
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
DELETE FROM dbo.Sys_ButtonPower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
|
|
OR ButtonToMenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
DELETE FROM dbo.Sys_RolePower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
DELETE FROM dbo.Sys_Menu
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
|
|
/* 先删旧视图,避免删除表后留下失效对象。 */
|
|
DECLARE @Sql nvarchar(max);
|
|
DECLARE @ViewName sysname;
|
|
DECLARE view_cursor CURSOR LOCAL FAST_FORWARD FOR
|
|
SELECT ViewName
|
|
FROM @DropViews
|
|
WHERE OBJECT_ID(N'dbo.' + ViewName, N'V') IS NOT NULL;
|
|
|
|
OPEN view_cursor;
|
|
FETCH NEXT FROM view_cursor INTO @ViewName;
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @Sql = N'DROP VIEW dbo.' + QUOTENAME(@ViewName) + N';';
|
|
EXEC sys.sp_executesql @Sql;
|
|
FETCH NEXT FROM view_cursor INTO @ViewName;
|
|
END;
|
|
CLOSE view_cursor;
|
|
DEALLOCATE view_cursor;
|
|
|
|
/* 删除目标表涉及的全部外键,再按明细表、主表顺序删除表。 */
|
|
DECLARE @ForeignKeyName sysname;
|
|
DECLARE @ChildSchemaName sysname;
|
|
DECLARE @ChildTableName sysname;
|
|
DECLARE fk_cursor CURSOR LOCAL FAST_FORWARD FOR
|
|
SELECT fk.name,
|
|
child_schema.name,
|
|
child_table.name
|
|
FROM sys.foreign_keys fk
|
|
JOIN sys.tables child_table
|
|
ON child_table.object_id = fk.parent_object_id
|
|
JOIN sys.schemas child_schema
|
|
ON child_schema.schema_id = child_table.schema_id
|
|
WHERE EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM @DropTables d
|
|
WHERE d.TableName = child_table.name
|
|
)
|
|
OR EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM @DropTables d
|
|
WHERE d.TableName = OBJECT_NAME(fk.referenced_object_id)
|
|
);
|
|
|
|
OPEN fk_cursor;
|
|
FETCH NEXT FROM fk_cursor INTO @ForeignKeyName, @ChildSchemaName, @ChildTableName;
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @Sql = N'ALTER TABLE ' + QUOTENAME(@ChildSchemaName) + N'.' + QUOTENAME(@ChildTableName)
|
|
+ N' DROP CONSTRAINT ' + QUOTENAME(@ForeignKeyName) + N';';
|
|
EXEC sys.sp_executesql @Sql;
|
|
FETCH NEXT FROM fk_cursor INTO @ForeignKeyName, @ChildSchemaName, @ChildTableName;
|
|
END;
|
|
CLOSE fk_cursor;
|
|
DEALLOCATE fk_cursor;
|
|
|
|
DECLARE @TableName sysname;
|
|
DECLARE table_cursor CURSOR LOCAL FAST_FORWARD FOR
|
|
SELECT TableName
|
|
FROM @DropTables
|
|
WHERE DropOrder < 99
|
|
ORDER BY DropOrder, TableName;
|
|
|
|
OPEN table_cursor;
|
|
FETCH NEXT FROM table_cursor INTO @TableName;
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
IF OBJECT_ID(N'dbo.' + @TableName, N'U') IS NOT NULL
|
|
BEGIN
|
|
SET @Sql = N'DROP TABLE dbo.' + QUOTENAME(@TableName) + N';';
|
|
EXEC sys.sp_executesql @Sql;
|
|
END;
|
|
FETCH NEXT FROM table_cursor INTO @TableName;
|
|
END;
|
|
CLOSE table_cursor;
|
|
DEALLOCATE table_cursor;
|
|
|
|
COMMIT TRANSACTION;
|
|
|
|
/* 删除结果:以下对象均应为 0。 */
|
|
SELECT d.TableName AS ObjectName,
|
|
CASE WHEN OBJECT_ID(N'dbo.' + d.TableName, N'U') IS NULL THEN 0 ELSE 1 END AS ExistsFlag
|
|
FROM @DropTables d
|
|
WHERE d.DropOrder < 99
|
|
ORDER BY d.TableName;
|
|
|
|
SELECT d.ViewName AS ObjectName,
|
|
CASE WHEN OBJECT_ID(N'dbo.' + d.ViewName, N'V') IS NULL THEN 0 ELSE 1 END AS ExistsFlag
|
|
FROM @DropViews d
|
|
ORDER BY d.ViewName;
|
|
|
|
SELECT N'Sys_Menu' AS ObjectName, COUNT_BIG(*) AS Records
|
|
FROM dbo.Sys_Menu
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
|
|
UNION ALL
|
|
SELECT N'Sys_MenuFlowOperate', COUNT_BIG(*)
|
|
FROM dbo.Sys_MenuFlowOperate
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
|
|
UNION ALL
|
|
SELECT N'Sys_ButtonPower', COUNT_BIG(*)
|
|
FROM dbo.Sys_ButtonPower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds)
|
|
OR ButtonToMenuId IN (SELECT MenuId FROM @MenuIds)
|
|
UNION ALL
|
|
SELECT N'Sys_RolePower', COUNT_BIG(*)
|
|
FROM dbo.Sys_RolePower
|
|
WHERE MenuId IN (SELECT MenuId FROM @MenuIds);
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF XACT_STATE() <> 0
|
|
ROLLBACK TRANSACTION;
|
|
THROW;
|
|
END CATCH;
|