このテーブルのプライマリ キー ID 値は、最近マージされた 2 つのシステムで使用されていますが、システムの 1 つに多数のアイテムが間違った ID 値を指しているため、ID(PK) を更新する必要があります。 ) の値を使用して、600 万の既存のアイテムが正しい行を指すようにします。
id id 列を次のように更新します。
ID
1 to 5
2 to 6
3 to 7
4 to 1
5 to 2
6 to 3
7 to 4
このテーブルのプライマリ キー ID 値は、最近マージされた 2 つのシステムで使用されていますが、システムの 1 つに多数のアイテムが間違った ID 値を指しているため、ID(PK) を更新する必要があります。 ) の値を使用して、600 万の既存のアイテムが正しい行を指すようにします。
id id 列を次のように更新します。
ID
1 to 5
2 to 6
3 to 7
4 to 1
5 to 2
6 to 3
7 to 4
それが IDENTITY 列ではないと仮定すると (その場合、IDENTITY_INSERT をオンに設定する必要があります)、次のように動作するはずです (たとえば、 SQLFiddleを参照してください) 。
UPDATE MyTable
SET ID =
CASE WHEN ID >= 4 SET ID - 3
ELSE ID + 4
END
case ステートメントで更新クエリを使用する
Update tableName set PkId = Case PkId
When 1 then 5
When 2 then 6
When 3 then 7
When 4 then 1
When 5 then 2
When 6 then 3
When 7 then 4 End
Where PkId In (1,2,3,4,5,6,7)
回答の値が、変更が必要な値のほんの一部である場合 (600 万すべてを変更する必要がありますか?)、古い正しくない値と新しい正しい値を持つマッピング テーブルを作成する必要があります。 caseステートメントの代わりに(結合で)それを使用します。
Update t set PkId = map.NewPkId
From tablename t
Join mappingTable m
On m.oldPkId = t.PkId