Pregunta

El uso de SQLite que necesito copiar casi la totalidad de una fila existente de una tabla, realizar un cambio en una sola columna, e insertar la nueva fila en la tabla. Algo más o menos como

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

He intentado la sustitución de un cierto valor de CI en el la lista de columnas SELECT. Esto funciona si el valor es un flotador o un número entero, pero no si se trata de una cadena. Si el valor es una cadena, SQLite interpreta como un nombre de columna, lo que naturalmente no existe y me sale un error.

Puedo escribir código para realizar esta operación, pero esperaba hacerlo en una sola consulta.

Si de relevancia, actualmente estoy de codificación en TCL.

Gracias,

Sean

¿Fue útil?

Solución

¿Quiere decir esto no funciona?

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

¿Cómo está construyendo su pregunta?

pseudocódigo por ejemplo esto no funcionará como se interpreta como othervalue nombrecolumna

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

Aunque esto funciona, porque el " alrededor othervalue se incluyen en formato de escape y luego SQLLite debe reconocerlo como expresión ya no como nombrecolumna

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

Otros consejos

Asegúrese de que ha rodeado a la cadena en 'singlequotes'. Me parece que funcionan mejor en la cotización de las cadenas en las consultas SQL que comillas dobles. Asegúrese de que están escaparon también.

No sé si TCL soporta consultas con parámetros o no. El uso de consultas con parámetros en SQLite tiene tres ventajas.

  1. Previene ataques de inyección SQL.
  2. Usted no tiene que preocuparse acerca de "y". No más cita de cotizaciones o escapar de las comillas.
  3. Es más rápido porque SQLite no tiene reanálisis de cada sentencia SQL cuando se utiliza parámetros. (Ver este enlace para un ejemplo de rendimiento ¿Cómo consigo alrededor del "'" problema de SQLite y C #? ).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top