Pergunta

Usando SQLite I necessidade de copiar quase todos de uma linha existente de uma tabela, fazer uma mudança para uma única coluna, e inserir a nova linha na tabela. Algo mais ou menos assim

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

Eu tentei substituindo a algum valor ci na lista de colunas SELECT. Isso funciona se o valor for um float ou um inteiro, mas não se for uma string. Se o valor for uma string, interpreta SQLite-lo como um nome da coluna, o que naturalmente não existe e eu recebo um erro.

Eu posso escrever código para executar esta operação, mas eu estava esperando para fazê-lo em uma consulta.

Se de relevância, estou atualmente codificação em tcl.

Obrigado,

Sean

Foi útil?

Solução

Você quer dizer que isso não funciona?

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

Como você está construindo sua consulta?

pseudocódigo v.g. isso não vai funcionar como otherValue é interpretado como columnname

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

Enquanto isso funciona, porque o " torno otherValue estão incluídos no formato de escape e, em seguida, SqlLite devem reconhecer como expressão não mais como columnname

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

Outras dicas

Verifique se você tem rodeado a corda no 'singlequotes'. Eu acho que eles funcionam melhor para citar cordas em consultas SQL do que de aspas. Certifique-se de que eles estão escapou também.

Eu não sei se suportes TCL parametrizado consultas ou não. Usando consultas parametrizadas no SQLite tem três vantagens.

  1. Ela impede ataques de injeção SQL.
  2. Você não tem que se preocupar com "e". Não mais citação de citações ou escapar de citações.
  3. É mais rápido porque SQLite não tem de reanalisar cada instrução SQL quando você usa parâmetros. (Veja este link para um exemplo de desempenho Como faço para contornar o" "problema no SQLite e c #? ).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top