ID de renumeración SQLite usando ciclo

Hola tengo una tabla con muchas filas insertadas. Necesito volver a numerar todas las filas por id y orderarlas.

Encontré este código pero no funciona para mí.

SET @i = 100; UPDATE "main"."Categories" SET ID = (@i := @i +1) WHERE "Name" = "White"; ALTER TABLE "main"."Categories" AUTO_INCREMENT = 1 

Entonces, usando el código anterior, esperaba volver a numerar todos los loggings que tengan nombre – blanco y comenzar a insertlos desde 100 con incremento 1. Pero no es trabajo para mí. Tal vez haya algún problema en mi código, pero tal vez sea una diferencia entre la consulta de SQL y SQLite.

Esta es la forma en que creé la tabla:

 CREATE TABLE Categories (id INTEGER PRIMARY KEY, Name TEXT, Free NUMERIC) 

Espero que ya haya una solución hecha para hacerlo porque no quiero hacerlo manualmente 🙂

Ese código no es SQL estándar.

SQLite no tiene muchas construcciones de progtwigción porque está diseñado para ser una database incrustada en la que es más natural tener la lógica en el lenguaje de host.

Si desea hacer esto en SQL, intente lo siguiente:
Primero, cree una tabla temporal para que tengamos una columna de autoincrement que pueda usarse para contar:

 CREATE TEMPORARY TABLE new_ids(i INTEGER PRIMARY KEY, old_id INTEGER); 

Inserte un logging ficticio para asegurarse de que el próximo nuevo logging comience en 100 , luego inserte todos los ID de la tabla Categories que desea cambiar:

 INSERT INTO new_ids VALUES(99, NULL); INSERT INTO new_ids SELECT NULL, id FROM "Categories" WHERE "Name" = 'White'; DELETE FROM new_ids WHERE i = 99; 

Entonces podemos cambiar todos estos ID en la tabla original:

 UPDATE "Categories" SET id = (SELECT i FROM new_ids WHERE old_id = "Categories".id) WHERE id IN (SELECT old_id FROM new_ids); DROP TABLE new_ids;