Domanda

Utilizzando SQLite devo copiare quasi tutti una riga esistente da una tabella, fare un cambiamento di una singola colonna, e inserire la nuova riga nella tabella. Qualcosa di grosso modo come

INSERT INTO $tablename (c1, c2, ... , cn) 
    SELECT (c1, c2, ... , cn) FROM $tablenam

Ho provato a sostituire un certo valore ci nella lista delle colonne SELECT. Questo funziona se il valore è un galleggiante oppure un numero intero, ma non se è una stringa. Se il valore è una stringa, SQLite lo interpreta come un nome di colonna, che naturalmente non esiste e ottengo un errore.

posso scrivere il codice per eseguire questa operazione, ma speravo di farlo in una query.

Se di pertinenza, Attualmente sto codifica in tcl.

Grazie,

Sean

È stato utile?

Soluzione

Vuoi dire che questo non funziona?

INSERT INTO $tablename (c1, c2, ... , cn)
    SELECT (c1, c2, ..., "othervalue", ... , cn) FROM $tablename

Come stai costruendo la tua ricerca?

pseudocodice esempio questo non funzionerà come othervalue viene interpretato come columnname

dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
        SELECT (c1, c2, ..., othervalue, ... , cn) FROM $tablename")

Anche se questo funziona, perché il " intorno othervalue sono inclusi in formato fuggito e poi SqlLite dovrebbe riconoscerlo come espressione non più come columnname

dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
        SELECT (c1, c2, ..., \"othervalue\", ... , cn) FROM $tablename")

Altri suggerimenti

Assicurarsi di aver circondato la stringa in 'singlequotes'. Trovo che funzionano meglio per aver citato le stringhe in query SQL di doublequotes. Assicurarsi che siano fuggiti troppo.

Non so se tcl supporta le query con parametri o meno. Utilizzando le query con parametri in SQLite ha tre vantaggi.

  1. Si previene attacchi di SQL injection.
  2. Non c'è bisogno di preoccuparsi 'e". Non più quoting di citazioni o di fuga di citazioni.
  3. E 'più veloce perché SQLite non ha rianalizzare ogni istruzione SQL quando si utilizzano i parametri. (Vedi questo link per un esempio prestazioni Come faccio ad avere intorno al "'" problema in SQLite e C #? ).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top