Frage

SQLite ich aus einer Tabelle fast alle einer vorhandenen Zeile kopieren müssen, um eine Änderung zu einer einzigen Spalte zu machen, und die neue Zeile in die Tabelle einfügen. Etwas grob wie

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

Ich habe versucht, einen gewissen Wert ci in die Liste der SELECT-Spalten zu ersetzen. Dies funktioniert, wenn der Wert einen Schwimmer oder eine ganze Zahl, aber nicht, wenn es sich um eine Zeichenfolge. Wenn der Wert ein String ist, SQLite interpretiert sie als Spaltenname, der natürlich nicht existiert und ich erhalte eine Fehlermeldung.

Ich kann Code schreiben, um diesen Vorgang auszuführen, aber ich habe gehofft, dass es in einer Abfrage zu tun.

Wenn relevant, ich bin Codierung derzeit in tcl.

Danke,

Sean

War es hilfreich?

Lösung

Sie meinen das nicht funktioniert?

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

Wie bauen Sie Ihre Abfrage?

Pseudo-Code z.B. das wird nicht funktionieren, wie othervalue als column interpretiert

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

, während das funktioniert, weil der " um othervalue in Escape-Format enthalten ist, und dann sollte SQLLite es als Ausdruck erkennt nicht mehr als column

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

Andere Tipps

Stellen Sie sicher, dass Sie die Zeichenfolge in 'singlequotes' umgeben haben. Ich finde sie besser für Zeichenfolgen in SQL-Abfragen als doublequotes zitieren. Stellen Sie sicher, dass auch sie entkommen.

Ich weiß nicht, ob tcl parametrisierte Abfragen unterstützt oder nicht. Mit parametrisierte Abfragen in SQLite hat drei Vorteile.

  1. Sie verhindert, dass SQL-Injection-Attacken.
  2. Sie müssen von Anführungszeichen nicht darum kümmern "und“. Nicht mehr unter Angabe von Zitaten oder Flucht.
  3. Es ist schneller, weil SQLite nicht jede SQL-Anweisung zu Analysepunkte hat, wenn Sie Parameter verwenden. (Siehe diesen Link für eine Leistung Beispiel ).
scroll top