简体   繁体   中英

Having troubles inserting multiple records at once without using for loop in sql server database using node.js

Hello guys I'm new in using mysql library in node js and I'm interested in possibility of inserting multiple rows at once in database. I've made a simple code which captures user registration id from database table and uses indexes of roles which that user has selected. And now I want to add user and role id into Role_User table which has user_id and role_id respectively.

Let's say I wanna do this 3 times without using loop:

Insert Into User_role VALUES (1,20);

Insert Into User_role VALUES (2,20);

Insert Into User_role VALUES (3,20);

, where numbers 1,2,3 of the first columns are role indexes.

Error I'm getting is RequestError: Incorrect syntax near '?'.

How can I make this query work?

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");
                        });
                    })
                }

Check if it helps, please. I cannot check it running, of course.

It's not complete, on the contrary! request.query is async, and that code has to be revised.

At least, this code, as I hope, does not break into RequestError: Incorrect syntax near '?'.

Please:

  • check if the revision works for one input
  • whenever you get the complete solution, share it with us
    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");
                            }
                        );
                    }
                );
            })
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM