0

我有一个名为*Provider_Compliances*的表 (ProviderNum、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_Compliance 表的主键更改为复合键(ComplianceNumber、HistorySequence)。

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

所以,我想这样做:

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

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。

4

1 回答 1

1

您将能够使用 SQL 脚本执行此操作,如下所示

  1. 创建一个临时表,其中包含按 ProviderNumber + ProviderLocation + ProviderEffectiveDate 的记录组,包括新列
  2. 循环遍历临时表并更新新列(使用增量编号 - 或根据需要)
  3. 将此表与原始表连接并使用临时表中的值更新原始表的新列
于 2012-09-14T09:36:19.533 回答