我一直在开发一个需要新代码的 DBO。
我必须在具有数千行的列中手动添加特定代码以满足我的要求。
问题是,有些已经填充,我需要将它们添加到下一个可用的空列中。
目前采用以下格式:
我需要将代码 Z987 添加到每个 ID 的第一个 NULL
首先,无论是谁设计了这些数据,都需要阅读数据库规范化,因为这种设计违反了最基本的原则。最好的解决方案是重新设计数据以遵循良好的设计实践。
但是,如果这不是一个选项,您将需要编写一个
UPDATE
语句来更新每个列,但有条件地选择当前值或新值作为要分配的值。条件将基于已设置的列。为了避免逻辑重复,您可以使用 CROSS APPLY
来标识要更新哪一列。然后可以将其用于在 CASE
逻辑中提供 SET
表达式。
结果会是这样的:
UPDATE T
SET
ColumnA = CASE WHEN C.ColumnSelect = 1 THEN 'NewValue' ELSE ColumnA END,
...
ColumnF = CASE WHEN C.ColumnSelect = 6 THEN 'NewValue' ELSE ColumnF END
FROM YourTable T
CROSS APPLY (
SELECT CASE
WHEN ColumnA IS NULL THEN 1
...
WHEN ColumnF IS NULL THEN 6
ELSE 0
END AS ColumnSelect
) C