Hola chicos, soy nuevo en el uso de la biblioteca mysql en el nodo js y estoy interesado en la posibilidad de insertar varias filas a la vez en la base de datos. Creé un código simple que captura la identificación de registro del usuario de la tabla de la base de datos y usa índices de roles que ese usuario ha seleccionado. Y ahora quiero agregar el ID de usuario y rol en la tabla Role_User que tiene user_id y role_id respectivamente.
Digamos que quiero hacer esto 3 veces sin usar loop:
Insert Into User_role VALUES (1,20); Insert Into User_role VALUES (2,20); Insert Into User_role VALUES (3,20);, donde los números 1,2,3 de las primeras columnas son índices de roles.
Error I'm getting is RequestError: Incorrect syntax near '?'.¿Cómo puedo hacer que esta consulta funcione?
if(req.body.roles){ var sqlQuery = `SELECT ID from Test_user Where email = @email`; var indexiRola = findPositions(db.ROLES, req.body.roles); request.input('role', db.sql.NChar, req.body.roles); request.query(sqlQuery).then( id => { let ids = Array(req.body.roles.length).fill(id.recordset[0].ID); console.log(ids); // [20, 20, 20] let roleUsers = createSeperateLists(indexiRola, ids); console.log(roleUsers); // [ [ 1, 20], [ 2, 20], [ 3, 20] ] var insertQuery = `INSERT INTO Role_User ("role_ID", "user_id") VALUES ?`; request.query(insertQuery, [roleUsers], function(err, result){ if(err) throw err; console.log("Successfull insertion"); }); }) }Comprueba si te ayuda, por favor. No puedo verificar que funcione, por supuesto.
¡No está completo, al contrario! request.query es asíncrono y ese código debe revisarse.
Al menos, este código, como espero, no interrumpe RequestError: Incorrect syntax near '?'.
Por favor:
if (req.body.roles) { var sqlQuery = `SELECT ID from Test_user Where email = @email`; var indexiRola = findPositions(db.ROLES, req.body.roles); request.input('role', db.sql.NChar, req.body.roles); request.query(sqlQuery).then( id => { let ids = Array(req.body.roles.length).fill(id.recordset[0].ID); console.log(ids); // [20, 20, 20] let roleUsers = createSeperateLists(indexiRola, ids); console.log(roleUsers); // [ [ 1, 20], [ 2, 20], [ 3, 20] ] // I removed the double quotes from the names and, // VALUES (?, ?) - this is the right syntax for SQL const insertQuery = 'INSERT INTO Role_User (role_ID, user_id) VALUES (?, ?)'; // Then, forEach roleUsers // By the way, [roleUsers] yields an array of arrays of arrays, not cool roleUsers.forEach( roleUser => { request.query( insertQuery, roleUser, // Oh! Shoot!!! This is async. // Man, you will have to deal with it. // Please, share with us the final solution! function(err, result) { if (err) throw err; console.log("Successfull insertion"); } ); } ); }) }