SQLite: Copier toutes les valeurs d'une ligne précédente avec une substitution
Question
En utilisant SQLite je dois copier presque tous d'une ligne existante à partir d'une table, faire un changement à une seule colonne, et insérez la nouvelle ligne dans la table. Quelque chose à peu près comme
INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ... , cn) FROM $tablenam
J'ai essayé la substitution d'une certaine valeur ci dans la la liste des colonnes SELECT. Cela fonctionne si la valeur est un flotteur ou un entier, mais pas si elle est une chaîne. Si la valeur est une chaîne, SQLite interprète comme un nom de colonne, qui naturellement n'existe pas et je reçois une erreur.
Je peux écrire du code pour effectuer cette opération, mais j'espérais le faire dans une requête.
Si la pertinence, je suis codage actuellement tcl.
Merci,
Sean
La solution
Vous voulez dire que cela ne fonctionne pas?
INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., "othervalue", ... , cn) FROM $tablename
Comment construisez-vous votre requête?
pseudocode par exemple, cela ne fonctionnera pas comme autreValeur est interprété comme columnname
dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., othervalue, ... , cn) FROM $tablename")
alors que cela fonctionne, parce que les autreValeur sont autour "
inclus dans le format d'échappement et SqlLite devrait le reconnaître comme l'expression non plus comme columnname
dothquery("INSERT INTO $tablename (c1, c2, ... , cn)
SELECT (c1, c2, ..., \"othervalue\", ... , cn) FROM $tablename")
Autres conseils
Assurez-vous que vous avez entouré la chaîne dans 'singlequotes'
. Je trouve qu'ils fonctionnent mieux pour citer les chaînes dans les requêtes SQL que doublequotes. Assurez-vous qu'ils sont échappés aussi.
Je ne sais pas si tcl supporte les requêtes paramétrées ou non. Utilisation de requêtes paramétrées dans SQLite a trois avantages.
- Il empêche les attaques par injection SQL.
- Vous n'avez pas à vous soucier "et ». Plus de citation de citations ou d'échapper à des citations.
- Il est plus rapide parce que SQLite n'a pas à réanalyser chaque instruction SQL lorsque vous utilisez des paramètres. (Voir ce lien pour un exemple de performance
Licencié sous: CC-BY-SA avec attributionNon affilié à StackOverflow