-- ===================================================================== -- 安全巡检:工程名称 = 监督巡视部位,移除冗余字段 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