S'Lite: Копировать все значения из предыдущей строки с одной заменой

Используя S'Lite мне нужно скопировать почти все существующие строки из таблицы, внести изменения в одну колонку, и вставить новую строку в таблицу. Что-то примерно как

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

Я попытался заменить некоторое значение ci в список select столбцов. Это работает, если значение поплавка или integer, но не если это строка. Если значение является строкой, S'Lite интерпретирует его как имя столбца, которого, естественно, не существует, и я получаю ошибку.

Я могу написать код для выполнения этой операции, но я надеялся сделать это в одном запросе.

Если актуальность, я в настоящее время кодирования в tcl.

Спасибо,

Шон

Ответ на: "S'Lite: Копировать все значения из предыдущей строки с одной заменой"

Количество ответов:3

Вы имеете в виду это не работает?

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

Как вы строите свой запрос?

псевдокод, например, это не будет работать, как othervalue интерпретируется как название колонки

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

в то время как это работает, потому что " around othervalue are included in escaped format and then sqllite should recognize it as expression not anymore as columnname вокруг othervalue включены в сбежавший формат, а затем sqllite должны признать его как выражение больше не как колонка имя

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

Убедитесь, что вы окружили строку в 'singlequotes'. I find they work better for quoting strings in SQL queries than doublequotes. Make sure they are escaped too. . Я считаю, что они работают лучше для цитирования строк в запросах S'L, чем двойные цитаты. Убедитесь, что они бежали тоже.

Я не знаю, поддерживает ли tcl параметризированные запросы или нет. Использование параметризированных запросов в sqlite имеет три преимущества.

  1. Это предотвращает sql инъекционных атак.
  2. Вам не придется беспокоиться о ' и ". Нет больше цитирования цитат или побега из кавычек.
  3. Это быстрее, потому что sqlite не придется reparse каждый sql заявление при использовании параметров. (См. эту ссылку для примера производительности How do I get around the "'" problem in sqlite and c#? ). ).