Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

189
Vistas
Error al pasar la misma variable a varias partes de la instrucción SQL

Así que tengo una consulta de Node.js que debería pasar estos tres valores y actualizar una columna específica por una cantidad específica para un usuario con una identificación específica:

 await client.query(sqlStatement, [columnName, changeBy, id])

El 'sqlStatement' se parece a:

 'UPDATE tableName SET ($1) = ($1) + ($2) WHERE id = ($3)'

Como puede ver, debe pasar los valores de manera que la instrucción SQL se vea así:

 'UPDATE tableName SET columnName = columnName + changeBy WHERE id = id'

También intenté escribir sqlStatement como se muestra a continuación (y solo pasé columnName dos veces en la consulta, pero esto también da como resultado un error:

 'UPDATE tableName SET ($1) = ($2) + ($3) WHERE id = ($4)'

El error devuelto es error: error de sintaxis en o cerca de "$1".

No estoy seguro de cómo solucionar esto, cualquier ayuda es muy apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La razón por la que esto sucede es que node-postgres no admite parámetros de consulta para identificadores y el nombre de su columna después de SET es un identificador. Además, incluso si esto funcionó, a menos que node-postgres alguna manera sustituya el ($1) con paréntesis) por su valor, obtendría

ERROR: source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression .

Si desea mantener node-postgres , su documentación recomienda usar formato pg en tales casos, para construir una declaración SQL dinámica. Si considera alternativas, puede buscar en Knex.js que creará las consultas por usted, así:

 knex('tableName') .update({ columnName: knex.raw('?? + ?',['columnName',changeBy]) }) .where('id', id)

Y mientras tanto, como solución alternativa, debería poder configurar su sqlStatement en una consulta SQL dinámica por su cuenta:

 do language plpgsql $$ begin execute format('UPDATE test SET %I = %I + %s WHERE id = %s','$1','$1',$2,$3); end$$;

y prueba con eso. Tenga en cuenta que eliminé los paréntesis de la columna de actualización para evitar el error de ACTUALIZACIÓN de varias columnas. Lo que debería suceder es que node-postgres evalúe lo anterior para

 do language plpgsql $$ begin execute format('UPDATE test SET %I = %I + %s WHERE id = %s','col','col',51,72); end$$;

y pasarlo a PostgreSQL, que debería ejecutarlo como

 UPDATE test SET "col" = "col" + 51 WHERE id = 72;

Del documento :

  • %I es para identificadores I , que PostgreSQL citará automáticamente si es necesario.
  • %L es para iterales de cadena L
  • %s es para sustitución de cadena simple, en el sentido de que no se citará, por lo que puede usarse para literales numéricos
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda