Questa operazione può essere eseguita utilizzando la sintassi * senza conoscere lo schema della tabella (diverso dal nome della chiave primaria). Il trucco è creare una tabella temporanea usando la sintassi "CREATE TABLE AS".
In questo esempio presumo che esista una tabella popolata esistente denominata "src" con una CHIAVE PRIMARIA INTEGER chiamata "id", nonché diverse altre colonne. Per duplicare le righe di "src", utilizzare il seguente SQL in SQLite3:
CREATE TEMPORARY TABLE tmp AS SELECT * FROM src;
UPDATE tmp SET id = NULL;
INSERT INTO src SELECT * FROM tmp;
DROP TABLE tmp;
L'esempio sopra duplica tutte le righe della tabella "src". Per duplicare solo una riga desiderata, è sufficiente aggiungere una clausola WHERE alla prima riga. Questo esempio funziona perché la tabella "tmp" non ha alcun vincolo di chiave primaria, ma "src" lo fa. L'inserimento di chiavi primarie NULL in src fa sì che vengano dati valori auto generati.
Dalla documentazione SQLite: http://www.sqlite.org/lang_createtable.html
A "CREATE TABLE ... AS SELECT" istruzione crea e popola una tabella del database sulla base dei risultati di un'istruzione SELECT. Una tabella creata utilizzando CREATE TABLE AS non ha PRIMARY KEY e nessun vincolo di alcun tipo.
Se si vuole essere davvero fantasiosi, è possibile aggiungere un trigger che aggiorna una terza tabella che associa le vecchie chiavi primarie alle chiavi primarie appena generate.
fonte
2012-02-23 17:44:25
Questo non è lavoro per me dice 'fornito n + 1 valori dove n colonne disponibili' –