2012-11-07 83 views
3

我需要所有表一樣移的ID(ID = ID + 1)其中ID是主鍵

UPDATE TODO SET id = id + 1 

主鍵移位,但我不能做到這一點(Demo從艾哈邁德-Mutawa答案)描述爲什麼。主鍵不能像這樣改變。

我也可以根據這是源碼不改變表:http://www.sqlite.org/omitted.html

我正在考慮其他columnts但沒有TSQL一些硬編碼的遞歸變化和存儲過程很難讓我怎麼弄我能做了?

+1

你試過了嗎? –

+0

*爲什麼*你需要改變值,因爲在這裏,似乎是任意的標識符?你應該把它們看作*看起來像數字的不透明斑點。 –

+0

@Patrick B. sqlite對我來說是非常新的,我不能使用tsql和存儲過程。我甚至不知道從哪裏開始。 – Cynede

回答

6

當你執行你的命令UPDATE,你會暫時得到重複的ID。

要避免這種情況,請分兩步更改ID。
首先,選擇一個數字,是不是最大的ID較大,並將其添加到所有ID:

UPDATE TODO SET id = id + 1000000000 

然後,從所有的ID減去一個都不能少:

UPDATE TODO SET id = id - (1000000000 - 1) 
+0

太棒了!謝謝。完美的作品(http://sqlfiddle.com/#!7/bd109/10) – Cynede

1

不確定Sqlite是否具有禁用主鍵的功能。如果是,您可以禁用它,更新表格並重新打開主鍵。

+0

根據此:http://www.sqlite.org/omitted.html我不能這樣做 – Cynede

2

It did not work

這是不可能的,而不改變第一表(通過去除主鍵屬性)來更新SQLite的主鍵。

這裏是SQLFiddle Demo

+0

我明白了,但這是不可能改變表。 http://www.sqlite.org/omitted.html – Cynede

+0

@Ash在這種情況下,您需要創建一個新的臨時表並將數據複製到該臨時表中,然後刪除第一個臨時表,然後將temp重命名爲與舊的。 – Ahmad