こんにちは、次の方法でテーブルの外部キー値を更新したいと思います。
FK
1 to 5
2 to 6
3 to 7
4 to 1
5 to 2
6 to 3
7 to 4
ただし、上記を順番に実行すると、次のようになります。
update table set fk = 5 where fk=1
値 5 を更新する場合は、値 1 を 5 に変更した以前の更新ステートメントの結果と値を混合します。
以前の結果と混合せずにこれらの値を更新するにはどうすればよいですか。
こんにちは、次の方法でテーブルの外部キー値を更新したいと思います。
FK
1 to 5
2 to 6
3 to 7
4 to 1
5 to 2
6 to 3
7 to 4
ただし、上記を順番に実行すると、次のようになります。
update table set fk = 5 where fk=1
値 5 を更新する場合は、値 1 を 5 に変更した以前の更新ステートメントの結果と値を混合します。
以前の結果と混合せずにこれらの値を更新するにはどうすればよいですか。
テーブルに一時的に列Updated BIT
を追加し、行の値を更新するときに、このビットを1
(True - 更新済み) に設定して、更新済みの行を更新しないようにすることができます。
ステップ 1: 値を含む新しい列を追加します0
(false - まだ更新されていません):
ALTER TABLE dbo.YourTable
ADD Updated BIT NOT NULL DEFAULT(0) WITH VALUES
ステップ 2: 更新を行います -Updated
国旗を尊重してください!
UPDATE dbo.YourTable
SET fk = 5, Updated = 1
WHERE fk = 1 AND Updated = 0
ステップ 3: すべてが更新されたら、列を再度ドロップします。
ALTER TABLE dbo.YourTable
DROP COLUMN Updated
FreshPrince が提案したように、追加の列を使用できます。新しい列を追加して適切な値に設定し、キーを新しい列に変更します。
別のアプローチは、その範囲外の値のセットを使用することです。これにより、列を追加および削除する必要がなくなります。そう...
update table set fk = 15 where fk=1
1 to 15
2 to 16
3 to 17
4 to 11
5 to 12
6 to 13
7 to 14
次に、すべての行から 10 を減算する単純な更新です。
update table set fk = fk - 10
外部キー制約も削除して元に戻す必要があります。
CASE 式を使用して、単一の UPDATE ステートメントで新しい値を指定することもできます。
UPDATE YourTable
SET fk=CASE fk
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 fk IN (1,2,3,4,5,6,7)
この特定のケースでは、以下も使用できます。
UPDATE YourTable
SET fk=(fk+3)%7+1
WHERE fk BETWEEN 1 AND 7
ラズヴァン