3

テーブルのすべての主キーを同様にシフトする必要があります

UPDATE TODO SET id = id + 1 

しかし、私はそれを行うことができません( アフマドアルムタワの回答からのデモ)理由を説明します。主キーはこのように変更することはできません。

また、これがsqliteであるためにテーブルを変更することはできません:http ://www.sqlite.org/omitted.html

他の列のハードコードされた再帰的な変更について考えていますが、tsqlとストアドプロシージャがないと、どうすればそれを実現できますか?

4

3 に答える 3

6

コマンドを実行するUPDATEと、重複した ID が一時的に取得されます。

これを回避するには、ID を 2 段階で変更します。
最初に、最大の ID より大きい数値を選択し、それをすべての ID に追加します。

UPDATE TODO SET id = id + 1000000000

次に、すべての ID から 1 を引きます。

UPDATE TODO SET id = id - (1000000000 - 1)
于 2012-11-07T08:39:43.557 に答える
2

それは動かなかった

最初にテーブルを変更せずに SQLite の主キーを更新することはできません (PRIMARY キー プロパティを削除することによって)。

ここにSQLFiddleデモがあります

于 2012-11-07T07:51:10.503 に答える
1

Sqlite に主キーを無効にする機能があるかどうかは不明です。はいの場合は、無効にしてテーブルを更新し、主キーを元に戻すことができます。

于 2012-11-07T07:47:40.513 に答える