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