0

このテーブルのプライマリ キー 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
4

2 に答える 2

1

それが IDENTITY 列ではないと仮定すると (その場合、IDENTITY_INSERT をオンに設定する必要があります)、次のように動作するはずです (たとえば、 SQLFiddleを参照してください) 。

UPDATE MyTable 
SET ID = 
    CASE WHEN ID >= 4 SET ID - 3 
         ELSE  ID + 4
    END
于 2013-04-08T14:18:44.040 に答える
0

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
于 2013-04-08T14:23:25.030 に答える