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

804 lines
32 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
陕化建施工管理系统安全管理收口清理脚本
目标库:SGGLDB_SHJ
删除范围:
- HSSE 安全管理中除人员信息、人员资质、培训/考试外的旧业务表;
- 已确认下线的事故、行动计划、隐患、应急、环境、作业票、会议、职业健康、
设备报批、质量设备/分包资质、方案、月报、实名制旧同步等专属表;
- 安全专属基础字典、旧视图、旧存储过程及菜单权限残留。
明确保留:
- SitePerson_*、Person_*、QualityAudit_PersonQuality、
QualityAudit_SafePersonQuality、QualityAudit_EquipmentPersonQuality;
- Training_*、Test_*、Person_Training*;
- WBS_*、HJGL_*、焊接共享质量表及质量检查表;
- InformationProject_Notice、InformationProject_ReceiveFileManager;
- RealName_BasicData、RealName_City、RealName_Country;
- Base_CompanyTemplate、Base_Train*、Base_WorkPost 等仍被保留模块使用的表。
说明:
- 用户已确认数据库此前完成备份,本脚本不再执行备份。
- 所有 DDL 在一个事务内执行;外键、视图、菜单权限均先处理。
- 脚本可重复执行,不存在的目标对象自动跳过。
- 不删除 SmartSite_*、Weather、Kqgl_DateManage 及人员/WBS/焊接/质量共享对象。
*/
USE [SGGLDB_SHJ];
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF DB_NAME() <> N'SGGLDB_SHJ'
THROW 50000, N'当前数据库不是 SGGLDB_SHJ,已停止执行。', 1;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @DropTables TABLE
(
TableName sysname NOT NULL PRIMARY KEY,
DropOrder tinyint NOT NULL
);
INSERT INTO @DropTables (TableName, DropOrder)
VALUES
(N'Accident_AccidentHandle', 1),
(N'Accident_AccidentPersonRecord', 1),
(N'Accident_AccidentReport', 1),
(N'Accident_AccidentReportOther', 1),
(N'Accident_AccidentReportOtherItem', 1),
(N'Accident_NoFourLetoff', 1),
(N'ActionPlan_ActionPlanList', 1),
(N'ActionPlan_ActionPlanListApprove', 1),
(N'ActionPlan_CompanyManagerRule', 1),
(N'ActionPlan_MainContract', 1),
(N'ActionPlan_MainContractApprove', 1),
(N'ActionPlan_MainContractOpinion', 1),
(N'ActionPlan_ManagerRule', 1),
(N'ActionPlan_ProjectManagerRule', 1),
(N'ActionPlan_ProjectPlan', 1),
(N'ActionPlan_ProjectPlanApprove', 1),
(N'ActionPlan_ProjectPlanOpinion', 1),
(N'Base_AccidentType', 1),
(N'Base_EmergencyType', 1),
(N'Base_HSSEStandardListType', 1),
(N'Base_LawsRegulationsType', 1),
(N'Base_LicenseType', 1),
(N'Base_ManageRuleType', 1),
(N'Base_RiskLevel', 1),
(N'Base_SafetyMeasures', 1),
(N'Base_SolutionTempleteType', 1),
(N'Base_SpecialSchemeType', 1),
(N'Base_SuperviseCheckType', 1),
(N'Check_CheckColligation', 1),
(N'Check_CheckColligationDetail', 1),
(N'Check_CheckSpecial', 1),
(N'Check_CheckSpecialDetail', 1),
(N'Check_IncentiveNotice', 1),
(N'Check_IncentiveNoticeFlowOperate', 1),
(N'Check_PauseNotice', 1),
(N'Check_PauseNoticeFlowOperate', 1),
(N'Check_ProjectLeaderCheck', 1),
(N'Check_PunishNotice', 1),
(N'Check_PunishNoticeFlowOperate', 1),
(N'Check_PunishNoticeItem', 1),
(N'Check_RectifyNotices', 1),
(N'Check_RectifyNoticesFlowOperate', 1),
(N'Check_RectifyNoticesItem', 1),
(N'CostGoods_CostManage', 1),
(N'CostGoods_CostManageFlowOperate', 1),
(N'CostGoods_CostManageItem', 1),
(N'CostGoods_CostSmallDetail', 1),
(N'CostGoods_CostSmallDetailItem', 1),
(N'CostGoods_Expense', 1),
(N'CostGoods_ExpenseDetail', 1),
(N'DigData_HSEDataCollect', 1),
(N'DigData_HSEDataCollectItem', 1),
(N'DigData_HSEDataCollectSubmission', 1),
(N'EduTrain_AccidentCase', 1),
(N'EduTrain_AccidentCaseItem', 1),
(N'EduTrain_TrainPersonRecord', 1),
(N'EduTrain_TrainRecord', 1),
(N'EduTrain_TrainRecordDetail', 1),
(N'EduTrain_TrainTest', 1),
(N'Emergency_DrillRecordList', 1),
(N'Emergency_EmergencyList', 1),
(N'Emergency_EmergencyProcess', 1),
(N'Emergency_EmergencyProcessItem', 1),
(N'Emergency_EmergencySupply', 1),
(N'Emergency_EmergencyTeamAndTrain', 1),
(N'Emergency_EmergencyTeamItem', 1),
(N'Environmental_EIAReport', 1),
(N'Environmental_EnvironmentalEmergencyPlan', 1),
(N'Environmental_EnvironmentalMonitoring', 1),
(N'Environmental_UnexpectedEnvironmental', 1),
(N'EnvironmentalCheck', 1),
(N'Hazard_EnvironmentalRiskItem', 1),
(N'Hazard_EnvironmentalRiskList', 1),
(N'Hazard_HazardList', 1),
(N'Hazard_HazardSelectedItem', 1),
(N'Hazard_RealTimeDevice', 1),
(N'Hazard_RealTimeValue', 1),
(N'HSSE_ConstructionRisk', 1),
(N'HSSE_ConstructionRiskApprove', 1),
(N'HSSE_ConstructionRiskCheck', 1),
(N'HSSE_ConstructionRiskControl', 1),
(N'HSSE_Hazard_HazardRegister', 1),
(N'HSSE_Hazard_HazardRegisterTypes', 1),
(N'HSSE_Weather', 1),
(N'HSSEData_HiddenDangerDetail', 1),
(N'HSSEData_HSSE', 1),
(N'HSSESystem_HSSEMainDuty', 1),
(N'HSSESystem_SafetyInstitution', 1),
(N'InApproveManager_EquipmentIn', 1),
(N'InApproveManager_EquipmentInItem', 1),
(N'InApproveManager_EquipmentOut', 1),
(N'InApproveManager_EquipmentOutItem', 1),
(N'InApproveManager_EquipmentQualityIn', 1),
(N'InApproveManager_EquipmentQualityInItem', 1),
(N'InApproveManager_GeneralEquipmentIn', 1),
(N'InApproveManager_GeneralEquipmentInItem', 1),
(N'InApproveManager_GeneralEquipmentOut', 1),
(N'InApproveManager_GeneralEquipmentOutItem', 1),
(N'Information_MillionsMonthlyReport', 1),
(N'Information_MillionsMonthlyReportItem', 1),
(N'InformationProject_Picture', 1),
(N'InformationProject_ProjectMap', 1),
(N'Law_HSSEStandardsList', 1),
(N'Law_LawRegulationList', 1),
(N'Law_LawRegulationSelectedItem', 1),
(N'Law_ManageRule', 1),
(N'Law_RulesRegulations', 1),
(N'License_BreakGround', 1),
(N'License_FireWork', 1),
(N'License_FlowOperate', 1),
(N'License_FlowOperateItem', 1),
(N'License_HeightWork', 1),
(N'License_HSETechnical', 1),
(N'License_LicenseItem', 1),
(N'License_LicenseManager', 1),
(N'License_LiftingWork', 1),
(N'License_LimitedSpace', 1),
(N'License_NightWork', 1),
(N'License_OpenCircuit', 1),
(N'License_RadialWork', 1),
(N'Manager_CompletionReport', 1),
(N'Meeting_AttendMeeting', 1),
(N'Meeting_ClassMeeting', 1),
(N'Meeting_MonthMeeting', 1),
(N'Meeting_SafetyLeaderGroupMeeting', 1),
(N'Meeting_SpecialMeeting', 1),
(N'Meeting_WeekMeeting', 1),
(N'OccupationHealth_HazardDetection', 1),
(N'OccupationHealth_OccupationalDiseaseAccident', 1),
(N'OccupationHealth_PhysicalExamination', 1),
(N'ProcessControl_InspectionManagement', 1),
(N'ProcessControl_InspectionManagementApprove', 1),
(N'ProcessControl_InspectionManagementDetail', 1),
(N'Project_HSEDiary', 1),
(N'Project_HSSEData_HiddenDangerDetail', 1),
(N'Project_HSSEData_HSSE', 1),
(N'Project_SYHSEData_SYHSE', 1),
(N'QualityAudit_EquipmentQuality', 1),
(N'QualityAudit_EquipmentQualityAuditDetail', 1),
(N'QualityAudit_GeneralEquipmentQuality', 1),
(N'QualityAudit_SubUnitQuality', 1),
(N'QualityAudit_SubUnitQualityAuditDetail', 1),
(N'Resources_SignManage', 1),
(N'SecuritySystem_SafetyOrganization', 1),
(N'SeDin_MonthReport', 1),
(N'SeDin_MonthReport1', 1),
(N'SeDin_MonthReport10', 1),
(N'SeDin_MonthReport11', 1),
(N'SeDin_MonthReport12', 1),
(N'SeDin_MonthReport2', 1),
(N'SeDin_MonthReport3', 1),
(N'SeDin_MonthReport4', 1),
(N'SeDin_MonthReport4Other', 1),
(N'SeDin_MonthReport5', 1),
(N'SeDin_MonthReport6', 1),
(N'SeDin_MonthReport7', 1),
(N'SeDin_MonthReport8', 1),
(N'SeDin_MonthReport8Item', 1),
(N'SeDin_MonthReport9', 1),
(N'SeDin_MonthReport9Item_Rectification', 1),
(N'SeDin_MonthReport9Item_Special', 1),
(N'SeDin_MonthReport9Item_Stoppage', 1),
(N'SeDin_MonthReportFlowOperate', 1),
(N'Solution_ConstructSolution', 1),
(N'Solution_ExpertArgument', 1),
(N'Solution_LargerHazard', 1),
(N'Solution_LargerHazardList', 1),
(N'Solution_LargerHazardListItem', 1),
(N'Solution_SolutionTemplate', 1),
(N'Solution_TemporaryElectricity', 1),
(N'SYHSEData_Data', 1),
(N'SYHSEData_HiddenDangerCheck', 1),
(N'SYHSEData_RiskControl', 1),
(N'SYHSEData_SYHSE', 1),
(N'Technique_CheckItemDetail', 1),
(N'Technique_CheckItemSet', 1),
(N'Technique_Emergency', 1),
(N'Technique_Environmental', 1),
(N'Technique_HazardList', 1),
(N'Technique_HazardListType', 1),
(N'Technique_ProjectSolutionTemplete', 1),
(N'Technique_Rectify', 1),
(N'Technique_RectifyItem', 1),
(N'Technique_SpecialScheme', 1),
(N'RealName_CollTeam', 1),
(N'RealName_PersonInOutNow', 1),
(N'RealName_Project', 1),
(N'RealName_PushLog', 1),
(N'RealName_SynchroSet', 1);
DECLARE @DropViews TABLE
(
ViewName sysname NOT NULL PRIMARY KEY
);
INSERT INTO @DropViews (ViewName)
VALUES
(N'V_SeDin_MonthReport3'),
(N'View_ActionPlan_ManagerRule'),
(N'View_Check_CheckColligationDetail'),
(N'View_CheckSpecialDetail'),
(N'View_DataIn_MillionsMonthlyReport'),
(N'View_DataStatistics'),
(N'View_EduTrain_TrainFind'),
(N'View_EduTrain_TrainRecordDetail'),
(N'View_EduTrain_TrainTest'),
(N'View_Emergency_EmergencyTeamItem'),
(N'View_Hazard_EnvironmentalRiskItem'),
(N'View_Hazard_HazardRegister'),
(N'View_Hazard_HazardRegisterList'),
(N'View_HSSESystem_SafetyInstitution'),
(N'View_Information_MillionsMonthlyReport'),
(N'View_Law_LawRegulationList'),
(N'View_Law_LawRegulationSelectedItem'),
(N'View_Law_ManageRule'),
(N'View_Law_RulesRegulations'),
(N'View_License_LicenseManager'),
(N'View_Project_HSSEData_HSSE'),
(N'View_QualityAudit_EquipmentQuality'),
(N'View_QualityAudit_EquipmentQualityAuditDetail'),
(N'View_QualityAudit_SubUnitQuality'),
(N'View_QualityAudit_SubUnitQualityAuditDetail'),
(N'View_Solution_LargerHazardListItem'),
(N'View_Technique_Emergency'),
(N'View_Technique_RectifyItem'),
(N'View_Technique_SpecialScheme');
DECLARE @DropProcedures TABLE
(
ProcedureName sysname NOT NULL PRIMARY KEY
);
INSERT INTO @DropProcedures (ProcedureName)
VALUES
(N'Sp_DataStatistics'),
(N'Sp_DigData_HSEDataCollect'),
(N'Sp_Hazard_EnvironmentalRiskListReport'),
(N'Sp_Hazard_EnvironmentalRiskListReportImportantItem'),
(N'Sp_Hazard_EnvironmentalRiskListReportItem'),
(N'Sp_Hazard_HazardListReport'),
(N'Sp_Hazard_HazardSelectedItemImportantReport'),
(N'Sp_Hazard_HazardSelectedItemReport'),
(N'Sp_Project_GetToDoItems'),
(N'SP_RectifyNoticesListByProjectStates'),
(N'SpCheckColligationStatistic');
DECLARE @DropMenuIds TABLE
(
MenuId nvarchar(100) NOT NULL PRIMARY KEY
);
/* 删除已下线安全菜单;SitePerson 和人员资质菜单明确保留。 */
INSERT INTO @DropMenuIds (MenuId)
SELECT DISTINCT m.MenuId
FROM dbo.Sys_Menu AS m
WHERE
(m.Url LIKE N'HSSE/%'
AND m.Url NOT LIKE N'HSSE/SitePerson/%'
AND m.Url NOT IN
(
N'HSSE/QualityAudit/PersonQuality.aspx',
N'HSSE/QualityAudit/SafePersonQuality.aspx',
N'HSSE/QualityAudit/EquipmentPersonQuality.aspx'
))
OR m.Url LIKE N'ZHGL/Plan/ActionPlan%'
OR m.Url LIKE N'ZHGL/DataSync/HSSEData%'
OR m.Url LIKE N'ZHGL/DataSync/SYHSEData%'
OR m.Url LIKE N'ZHGL/DataSync/Project_HSSEData%'
OR m.Url LIKE N'ZHGL/DataSync/DataStatistics%'
OR m.Url LIKE N'/ZHGL/Supervise/%'
OR m.Url LIKE N'CQMS/Technique/%'
OR m.Url LIKE N'DigData/HSE%'
OR m.Url LIKE N'DigData/TrainRecordAnalysis%'
OR m.Url LIKE N'DigData/DailyProblemAnalysis%'
OR m.Url LIKE N'DigData/RectifyProblemAnalysis%'
OR m.Url LIKE N'%DataShow/%'
OR m.Url LIKE N'%OfficeCheck%'
OR m.Url LIKE N'%ProjectMap%'
OR m.Url LIKE N'%PHTGL%'
OR m.Url LIKE N'%JDGL%'
OR m.Url LIKE N'%PZHGL%';
/* 同时收口只剩已删除子菜单的安全父节点,含保留子菜单的父节点不会被选中。 */
WHILE 1 = 1
BEGIN
INSERT INTO @DropMenuIds (MenuId)
SELECT DISTINCT parent_menu.MenuId
FROM dbo.Sys_Menu AS parent_menu
WHERE parent_menu.MenuId IN
(
SELECT child_menu.SuperMenu
FROM dbo.Sys_Menu AS child_menu
JOIN @DropMenuIds AS dropped_child
ON dropped_child.MenuId = child_menu.MenuId
WHERE child_menu.SuperMenu IS NOT NULL
AND child_menu.SuperMenu <> N'0'
)
AND NOT EXISTS
(
SELECT 1
FROM dbo.Sys_Menu AS child_menu
WHERE child_menu.SuperMenu = parent_menu.MenuId
AND NOT EXISTS
(
SELECT 1
FROM @DropMenuIds AS dropped_child
WHERE dropped_child.MenuId = child_menu.MenuId
)
)
AND NOT EXISTS
(
SELECT 1
FROM @DropMenuIds AS already_dropped
WHERE already_dropped.MenuId = parent_menu.MenuId
);
IF @@ROWCOUNT = 0
BREAK;
END;
DECLARE @Sql nvarchar(max);
DECLARE @ObjectDefinition nvarchar(max);
DECLARE @StartPosition int;
DECLARE @EndPosition int;
/* 人员列表视图原来引用已下线 EduTrain 表,保留视图并改用当前培训任务统计。 */
IF OBJECT_ID(N'dbo.View_SitePerson_Person', N'V') IS NOT NULL
BEGIN
SET @ObjectDefinition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.View_SitePerson_Person'));
SET @ObjectDefinition = REPLACE(@ObjectDefinition, N'CREATE VIEW', N'ALTER VIEW');
SET @StartPosition = CHARINDEX(N'(SELECT COUNT(*) FROM EduTrain_TrainRecordDetail', @ObjectDefinition);
SET @EndPosition = CHARINDEX(N' AS TrainCount,', @ObjectDefinition, @StartPosition);
IF @StartPosition <= 0 OR @EndPosition <= @StartPosition
THROW 50001, N'View_SitePerson_Person 未找到旧 EduTrain 统计片段,已停止执行。', 1;
SET @ObjectDefinition = STUFF
(
@ObjectDefinition,
@StartPosition,
@EndPosition - @StartPosition,
N'(SELECT COUNT(*) FROM Training_Task AS T WHERE T.UserId = SitePerson.PersonId AND T.ProjectId = SitePerson.ProjectId)'
);
EXEC sys.sp_executesql @ObjectDefinition;
END;
/* APP 待办只保留培训/考试、现场人员和人员资质待办。 */
IF OBJECT_ID(N'dbo.Sp_APP_GetToDoItems', N'P') IS NOT NULL
BEGIN
SET @Sql = N'
ALTER PROCEDURE dbo.Sp_APP_GetToDoItems
@projectId NVARCHAR(50) = NULL,
@personId NVARCHAR(200) = NULL
AS
BEGIN
SELECT plans.PlanId AS DataId,
''B782A26B-D85C-4F84-8B45-F7AA47B3159E'' AS MenuId,
N''培训计划'' AS MenuName,
plans.PlanName AS Content,
persons.PersonId,
persons.PersonName,
plans.DesignerDate AS DataTime,
CONVERT(varchar(100), plans.DesignerDate, 23) AS DataTimeStr,
''/pages/train_task/train_index/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.Training_Plan AS plans
LEFT JOIN dbo.Person_Persons AS persons ON plans.DesignerId = persons.PersonId
WHERE plans.ProjectId = @projectId
AND (plans.States = ''0'' OR plans.States = ''1'')
AND plans.DesignerId = @personId
UNION ALL
SELECT test_plan.TestPlanId AS DataId,
''FAF7F4A4-A4BC-4D94-9E88-0CF5A380DB34'' AS MenuId,
N''考试计划'' AS MenuName,
test_plan.PlanName AS Content,
persons.PersonId,
persons.PersonName,
test_plan.PlanDate AS DataTime,
CONVERT(varchar(100), test_plan.PlanDate, 23) AS DataTimeStr,
''/pages/train_task/test_list/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.Training_TestPlan AS test_plan
LEFT JOIN dbo.Person_Persons AS persons ON test_plan.PlanManId = persons.PersonId
WHERE test_plan.ProjectId = @projectId
AND (test_plan.States = ''0'' OR test_plan.States = ''1'')
AND test_plan.PlanManId = @personId
UNION ALL
SELECT site_person.SitePersonId AS DataId,
''EE260447-028F-46AF-8864-9A5DC9DAA5BD'' AS MenuId,
N''现场人员'' AS MenuName,
site_person.PersonName AS Content,
persons.PersonId,
persons.PersonName,
site_person.InTime AS DataTime,
CONVERT(varchar(100), site_person.InTime, 23) AS DataTimeStr,
''/pages/info/people_detail/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.SitePerson_Person AS site_person
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = @personId
WHERE site_person.ProjectId = @projectId
AND site_person.States = ''1''
AND site_person.AuditorId = @personId
AND site_person.AuditorDate IS NULL
UNION ALL
SELECT quality.PersonQualityId AS DataId,
''EBEA762D-1F46-47C5-9EAD-759E13D9B41C'' AS MenuId,
N''特种作业人员'' AS MenuName,
site_person.PersonName AS Content,
persons.PersonId,
persons.PersonName,
quality.CompileDate AS DataTime,
CONVERT(varchar(100), quality.CompileDate, 23) AS DataTimeStr,
''/pages/info/speople_detail/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.QualityAudit_PersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = @personId
WHERE site_person.ProjectId = @projectId
AND quality.AuditorId = @personId
AND quality.States = ''1''
UNION ALL
SELECT quality.SafePersonQualityId AS DataId,
''750F5074-45B9-470E-AE1E-6204957421E6'' AS MenuId,
N''安管人员'' AS MenuName,
site_person.PersonName AS Content,
persons.PersonId,
persons.PersonName,
quality.CompileDate AS DataTime,
CONVERT(varchar(100), quality.CompileDate, 23) AS DataTimeStr,
''/pages/info/speople_detail/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.QualityAudit_SafePersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = @personId
WHERE site_person.ProjectId = @projectId
AND quality.AuditorId = @personId
AND quality.States = ''1''
UNION ALL
SELECT quality.EquipmentPersonQualityId AS DataId,
''96FB96FF-20D8-4CE9-AF57-C19717BB5D3E'' AS MenuId,
N''特种设备作业人员'' AS MenuName,
site_person.PersonName AS Content,
persons.PersonId,
persons.PersonName,
quality.CompileDate AS DataTime,
CONVERT(varchar(100), quality.CompileDate, 23) AS DataTimeStr,
''/pages/info/speople_detail/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.QualityAudit_EquipmentPersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = @personId
WHERE site_person.ProjectId = @projectId
AND quality.AuditorId = @personId
AND quality.States = ''1''
UNION ALL
SELECT task.TaskId AS DataId,
''E108F75D-89D0-4DCA-8356-A156C328805C'' AS MenuId,
N''培训任务'' AS MenuName,
plan_info.PlanName AS Content,
persons.PersonId,
persons.PersonName,
task.TaskDate AS DataTime,
CONVERT(varchar(100), task.TaskDate, 23) AS DataTimeStr,
''/pages/train_task/task_list/main'' AS UrlStr,
N'''' AS pcUrl
FROM dbo.Training_Task AS task
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = @personId
LEFT JOIN dbo.Training_Plan AS plan_info ON plan_info.PlanId = task.PlanId
WHERE task.ProjectId = @projectId
AND (task.States IS NULL OR task.States != ''2'')
AND task.UserId = @personId
ORDER BY DataTime DESC;
END;';
EXEC sys.sp_executesql @Sql;
END;
IF OBJECT_ID(N'dbo.View_APP_GetToDoItems', N'V') IS NOT NULL
BEGIN
SET @Sql = N'
ALTER VIEW dbo.View_APP_GetToDoItems
AS
SELECT ProjectId, PersonId, PersonName, MenuName
FROM
(
SELECT plans.PlanId AS DataId, N''培训计划'' AS MenuName,
persons.PersonId, persons.PersonName, plans.ProjectId
FROM dbo.Training_Plan AS plans
LEFT JOIN dbo.Person_Persons AS persons ON plans.DesignerId = persons.PersonId
WHERE persons.PersonId IS NOT NULL AND (plans.States = ''0'' OR plans.States = ''1'')
UNION ALL
SELECT test_plan.TestPlanId AS DataId, N''考试计划'' AS MenuName,
persons.PersonId, persons.PersonName, test_plan.ProjectId
FROM dbo.Training_TestPlan AS test_plan
LEFT JOIN dbo.Person_Persons AS persons ON test_plan.PlanManId = persons.PersonId
WHERE persons.PersonId IS NOT NULL AND (test_plan.States = ''0'' OR test_plan.States = ''1'')
UNION ALL
SELECT site_person.SitePersonId AS DataId, N''现场人员'' AS MenuName,
persons.PersonId, persons.PersonName, site_person.ProjectId
FROM dbo.SitePerson_Person AS site_person
LEFT JOIN dbo.Person_Persons AS persons ON site_person.AuditorId = persons.PersonId
WHERE persons.PersonId IS NOT NULL AND site_person.States = ''0''
UNION ALL
SELECT quality.PersonQualityId AS DataId, N''特种作业人员'' AS MenuName,
persons.PersonId, persons.PersonName, site_person.ProjectId
FROM dbo.QualityAudit_PersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = quality.AuditorId
WHERE persons.PersonId IS NOT NULL AND quality.States = ''1''
UNION ALL
SELECT quality.SafePersonQualityId AS DataId, N''安管人员'' AS MenuName,
persons.PersonId, persons.PersonName, site_person.ProjectId
FROM dbo.QualityAudit_SafePersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = quality.AuditorId
WHERE persons.PersonId IS NOT NULL AND quality.States = ''1''
UNION ALL
SELECT quality.EquipmentPersonQualityId AS DataId, N''特种设备作业人员'' AS MenuName,
persons.PersonId, persons.PersonName, site_person.ProjectId
FROM dbo.QualityAudit_EquipmentPersonQuality AS quality
LEFT JOIN dbo.SitePerson_Person AS site_person ON site_person.PersonId = quality.PersonId
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = quality.AuditorId
WHERE persons.PersonId IS NOT NULL AND quality.States = ''1''
UNION ALL
SELECT task.TaskId AS DataId, N''培训任务'' AS MenuName,
persons.PersonId, persons.PersonName, task.ProjectId
FROM dbo.Training_Task AS task
LEFT JOIN dbo.Person_Persons AS persons ON persons.PersonId = task.UserId
WHERE persons.PersonId IS NOT NULL AND (task.States IS NULL OR task.States != ''2'')
) AS V;';
EXEC sys.sp_executesql @Sql;
END;
/* 质量待办过程保留质量检查分支,去掉已确认删除的施工方案分支。 */
DECLARE @ProcedureName sysname;
DECLARE @SolutionPosition int;
DECLARE procedure_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT ProcedureName
FROM (VALUES
(N'SpAuditingManage'),
(N'SpAuditingManageByProjectId'),
(N'SpNotice'),
(N'SpNoticeByProjectId')
) AS names(ProcedureName)
WHERE OBJECT_ID(N'dbo.' + names.ProcedureName, N'P') IS NOT NULL;
OPEN procedure_cursor;
FETCH NEXT FROM procedure_cursor INTO @ProcedureName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ObjectDefinition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + @ProcedureName));
IF CHARINDEX(N'Solution_CQMSConstructSolution', @ObjectDefinition) > 0
BEGIN
SET @ObjectDefinition = REPLACE(@ObjectDefinition, N'CREATE PROCEDURE', N'ALTER PROCEDURE');
SET @SolutionPosition = CHARINDEX(N'Solution_CQMSConstructSolution', @ObjectDefinition);
SET @StartPosition = @SolutionPosition;
WHILE @StartPosition > 1
AND SUBSTRING(@ObjectDefinition, @StartPosition, 5) <> N'UNION'
BEGIN
SET @StartPosition = @StartPosition - 1;
END;
SET @EndPosition = CHARINDEX(N'UNION', @ObjectDefinition, @SolutionPosition);
IF @EndPosition <= @StartPosition
SET @EndPosition = CHARINDEX(N'END', @ObjectDefinition, @SolutionPosition);
IF @StartPosition <= 0 OR @EndPosition <= @StartPosition
THROW 50002, N'质量待办过程的施工方案分支定位失败,已停止执行。', 1;
SET @ObjectDefinition = STUFF(@ObjectDefinition, @StartPosition, @EndPosition - @StartPosition, N'');
EXEC sys.sp_executesql @ObjectDefinition;
END;
FETCH NEXT FROM procedure_cursor INTO @ProcedureName;
END;
CLOSE procedure_cursor;
DEALLOCATE procedure_cursor;
/* 删除菜单及其按钮、角色授权、流程操作残留。 */
DELETE FROM dbo.Sys_MenuFlowOperate
WHERE MenuId IN (SELECT MenuId FROM @DropMenuIds);
DELETE FROM dbo.Sys_ButtonToMenu
WHERE MenuId IN (SELECT MenuId FROM @DropMenuIds)
OR ButtonToMenuId IN (SELECT MenuId FROM @DropMenuIds);
DELETE FROM dbo.Sys_ButtonPower
WHERE MenuId IN (SELECT MenuId FROM @DropMenuIds)
OR ButtonToMenuId IN (SELECT MenuId FROM @DropMenuIds);
DELETE FROM dbo.Sys_RolePower
WHERE MenuId IN (SELECT MenuId FROM @DropMenuIds);
DELETE FROM dbo.Sys_Menu
WHERE MenuId IN (SELECT MenuId FROM @DropMenuIds);
/* 先删除旧视图和纯安全存储过程。 */
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 procedure_drop_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT ProcedureName
FROM @DropProcedures
WHERE OBJECT_ID(N'dbo.' + ProcedureName, N'P') IS NOT NULL;
OPEN procedure_drop_cursor;
FETCH NEXT FROM procedure_drop_cursor INTO @ProcedureName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql = N'DROP PROCEDURE dbo.' + QUOTENAME(@ProcedureName) + N';';
EXEC sys.sp_executesql @Sql;
FETCH NEXT FROM procedure_drop_cursor INTO @ProcedureName;
END;
CLOSE procedure_drop_cursor;
DEALLOCATE procedure_drop_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 AS fk
JOIN sys.tables AS child_table
ON child_table.object_id = fk.parent_object_id
JOIN sys.schemas AS child_schema
ON child_schema.schema_id = child_table.schema_id
JOIN sys.tables AS referenced_table
ON referenced_table.object_id = fk.referenced_object_id
WHERE EXISTS
(
SELECT 1 FROM @DropTables AS d
WHERE d.TableName = child_table.name
)
OR EXISTS
(
SELECT 1 FROM @DropTables AS d
WHERE d.TableName = referenced_table.name
);
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
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 AS d
ORDER BY d.TableName;
SELECT v.ViewName AS ObjectName,
CASE WHEN OBJECT_ID(N'dbo.' + v.ViewName, N'V') IS NULL THEN 0 ELSE 1 END AS ExistsFlag
FROM @DropViews AS v
ORDER BY v.ViewName;
SELECT p.ProcedureName AS ObjectName,
CASE WHEN OBJECT_ID(N'dbo.' + p.ProcedureName, N'P') IS NULL THEN 0 ELSE 1 END AS ExistsFlag
FROM @DropProcedures AS p
ORDER BY p.ProcedureName;
SELECT N'DroppedMenuRows' AS Metric, COUNT_BIG(*) AS Value
FROM @DropMenuIds;
SELECT N'Retained_SitePerson_Person' AS ObjectName,
CASE WHEN OBJECT_ID(N'dbo.SitePerson_Person', N'U') IS NULL THEN 0 ELSE 1 END AS ExistsFlag
UNION ALL
SELECT N'Retained_Person_Persons', CASE WHEN OBJECT_ID(N'dbo.Person_Persons', N'U') IS NULL THEN 0 ELSE 1 END
UNION ALL
SELECT N'Retained_Training_Plan', CASE WHEN OBJECT_ID(N'dbo.Training_Plan', N'U') IS NULL THEN 0 ELSE 1 END
UNION ALL
SELECT N'Retained_Training_TestRecord', CASE WHEN OBJECT_ID(N'dbo.Training_TestRecord', N'U') IS NULL THEN 0 ELSE 1 END
UNION ALL
SELECT N'Retained_WBS_UnitWork', CASE WHEN OBJECT_ID(N'dbo.WBS_UnitWork', N'U') IS NULL THEN 0 ELSE 1 END
UNION ALL
SELECT N'Retained_HJGL_WeldingDaily', CASE WHEN OBJECT_ID(N'dbo.HJGL_WeldingDaily', N'U') IS NULL THEN 0 ELSE 1 END
UNION ALL
SELECT N'Retained_QualityAudit_PersonQuality', CASE WHEN OBJECT_ID(N'dbo.QualityAudit_PersonQuality', N'U') IS NULL THEN 0 ELSE 1 END;
SELECT N'View_APP_GetToDoItems_TargetReferenceCount' AS Metric,
COUNT(*) AS Value
FROM sys.sql_expression_dependencies AS d
WHERE d.referencing_id = OBJECT_ID(N'dbo.View_APP_GetToDoItems')
AND d.referenced_entity_name IN
(
SELECT TableName FROM @DropTables
UNION ALL SELECT ViewName FROM @DropViews
);
SELECT N'Sp_APP_GetToDoItems_TargetReferenceCount' AS Metric,
COUNT(*) AS Value
FROM sys.sql_expression_dependencies AS d
WHERE d.referencing_id = OBJECT_ID(N'dbo.Sp_APP_GetToDoItems')
AND d.referenced_entity_name IN
(
SELECT TableName FROM @DropTables
UNION ALL SELECT ViewName FROM @DropViews
);
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;