Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

193
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!