Files
SGGL_HBAZ/SGGL/DataBase_HSSE_SafetyPatrol_DropPatrolLocation.sql
T

36 lines
1.5 KiB
Transact-SQL
Raw Normal View History

2026-09-04 14:31:07 +08:00
-- =====================================================================
-- 安全巡检:工程名称 = 监督巡视部位,移除冗余字段 PatrolLocation
-- 背景:`监督巡视部位` 实际取自危大超危工程(HazardProjectName),
-- 与 `工程名称` 为同一概念。PC 端/小程序均已下拉选择危大超危工程。
-- 原表冗余保存 PatrolLocation,且其值恒等于 HazardProjectName。
-- 影响:本脚本删除 dbo.HSSE_SafetyPatrol.PatrolLocation 列。
-- 因该列历史值与 HazardProjectName 相同,删除不丢失有效信息。
-- 执行前请先备份数据库。
-- =====================================================================
USE [SGGLDB]
GO
-- 1) 校验:该列是否与工程名称冗余(值均等于 HazardProjectName);如返回 >0 请先人工确认
SELECT COUNT(*) AS OTHERS
FROM dbo.HSSE_SafetyPatrol
WHERE ISNULL(PatrolLocation, '') <> ISNULL(HazardProjectName, '')
-- 2) 动态删除该列上的默认值约束(如存在)
GO
DECLARE @df NVARCHAR(200)
SELECT @df = dc.name
FROM sys.default_constraints dc
INNER JOIN sys.columns c ON c.object_id = dc.parent_object_id AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID('dbo.HSSE_SafetyPatrol') AND c.name = 'PatrolLocation'
IF @df IS NOT NULL
BEGIN
EXEC(N'ALTER TABLE [dbo].[HSSE_SafetyPatrol] DROP CONSTRAINT [' + @df + N']')
END
-- 3) 删除冗余列
GO
ALTER TABLE [dbo].[HSSE_SafetyPatrol]
DROP COLUMN [PatrolLocation]
GO