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_Compliancesテーブルの主キーを複合キー(ComplianceNumber、HistorySequence)に変更しようとしています。

既存のデータを失いたくありません。

だから、私はそれをこのようにすることを考えました:

// 1番目に、デフォルト値0の新しい列(ComplianceNumber)を追加します

ALTER TABLE Provider_Compliances ADD ComplianceNumber DECIMAL(10) DEFAULT 0 

// 2番目に、既存のすべての行を更新します

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 に答える