SQL:遍历行并更新具有相同主键的行集

时间:2012-09-13 22:02:57

标签: sql db2

我有一张名为 * Provider_Compliances * 的表格  (提供程序号,  ProviderLocation,  HistorySequence,  ProviderEffectiveDate,  PeriodBeginDate,  PeriodEndDate,  IsCompliant)

数据示例:

ProviderNum |ProviderLocatin  |HistorySequence|ProviderEffectiveDate|PeriodBeginDate|PeriodEndDate|IsCompliant
         1  |              1  |          2  |   2012-01-01        |  2010-01-03   | 2012-01-01  | No
         2  |              2  |          2  |   2012-01-01        |  2012-01-02   | 9999-12-31  | Yes

Provider_Compliances表的主键是(ProviderNumber,HistorySequence,ProviderLocation,ProviderEffectiveDate)。

我正在尝试添加新列(ComplianceNumber),然后将Provider_Compliances表的主键更改为组合键(ComplianceNumber,HistorySequence)。

我不想丢失任何先前存在的数据。

所以,我想这样做:

// 1st,添加新列(ComplianceNumber),默认值为0

ALTER TABLE Provider_Compliances ADD ComplianceNumber DECIMAL(10) DEFAULT 0 

// 2nd,更新所有现有行

UPDATE Provider_Compliances SET ComplianceNumber = (NEXT VALUE FOR Provider_Compliances_Sequence)

// 3,修改主键

ALTER TABLE Provider_Compliances DROP PRIMARY KEY
ALTER TABLE Provider_Compliances ADD PRIMARY KEY(ComplianceNumber, HistorySequence)

步骤2的问题是它会将每一行设置为新的ComplianceNumber。 我希望每个具有相同ProviderNumber + ProviderLocation + ProviderEffectiveDate的行都被授予相同的ComplianceNumber。

1 个答案:

答案 0 :(得分:1)

您可以使用SQL脚本执行此操作,如下所示

  1. 使用ProviderNumber +创建包含记录组的临时表 ProviderLocation + ProviderEffectiveDate包括新列
  2. 循环访问临时表并更新新列(使用增量编号 - 或根据需要)
  3. 加入此表与原始的&使用临时表
  4. 中的值更新原始表的新列