Je souhaite copier une ligne d'une table dans une base de données vers une table identique dans une autre base de données. Pour des fins de test, j'ai créé ceci:En utilisant insert dans database.table1, sélectionnez * from table2 où id = some_value;
CREATE TABLE stuff (absid integer primary key, otherfield string);
et une table 'stuff'
est comme ci-dessus dans deux bases de données, et testdb1
testdb2
. Ensuite, j'ai mis deux lignes dans 'stuff'
dans testdb1
. A partir d'une ligne de commande, je peux alors copier une ligne d'un db à l'autre, ainsi:
prompt> sqlite3 testdb1
sqlite> attach database testdb2 as testdb2;
sqlite> insert into testdb2.stuff select * from stuff where absid=2;
sqlite> ^d
prompt>
Jusqu'à présent, si bon. MAIS: il est tout à fait possible dans l'application où je veux réellement faire cela pour de vrai, qu'il y aura des clashes clés. Par exemple, si j'utilise la séquence ci-dessus pour copier la ligne de retour à testdb1
, je reçois:
SQL error: PRIMARY KEY must be unique
Ce que je voudrais arriver est que lorsque la ligne est copiée, on choisit une nouvelle absid unique, automatiquement si est un conflit. Est-il possible de spécifier ceci avec un select * ...
plus complexe ci-dessus? Je suppose que je peux contourner cela en créant un autre db (en mémoire, disons) avec la table identique mais sans la contrainte de clé primaire, et en faisant la copie en deux étapes (en définissant absid à null entre), mais je Je préférerais un moyen plus intelligent s'il en existe un.