#node.js #sql-server
Вопрос:
Я пытаюсь выполнить массовую вставку как часть транзакции. У меня возникла ситуация, когда мне нужно вставить в две таблицы как часть API, и одна из вставок потенциально может содержать много данных для вставки. Я создал транзакцию и пытаюсь выполнить массовую вставку для второй таблицы.
Я получаю следующую ошибку:
«Запросы могут быть сделаны только в состоянии LoggedIn, а не в состоянии SentClientRequest»
Я предполагаю, что неправильно настраиваю массовую вставку как часть транзакции?
router.post("/group", async function (req, res, next) { const id = uuidv4(); const { message, sentBy, group } = req.body; const pool = await curacao(); const transaction = new sql.Transaction(pool); await transaction.begin(async (err) =gt; { if (err) { res.status(500).json({ status: 500, err }); } // GET LIST OF MACHINES const machineListQuery = `select a.workstation_id, w.machineName, GETDATE() as currentDate from Gumshoe.dbo.Packages a join Gumshoe.dbo.WorkStations w on a.workstation_id = w.id where a.pkg_name = @group`; const machineListtrans = new sql.Request(transaction); const machineListResult = await machineListtrans .input("group", sql.VarChar, group) .query(machineListQuery); const currentDate = machineListResult.recordset[0].currentDate; // INSERT MESSAGE INTO MESSAGE TABLE const messageQuery = `INSERT into Gumshoe.dbo.BMT_Message (id, message, sentBy, sentDate) values (@id, @message, @sentBy, GETDATE())`; const messageRequest = new sql.Request(transaction); await messageRequest .input("message", sql.VarChar, message) .input("sentBy", sql.VarChar, sentBy) .input("id", sql.VarChar, id) .query(messageQuery); // INSERT LIST OF MACHINES INTO MESSAGE_LIST table var table = new sql.Table("Gumshoe.dbo.BMT_MessageList"); table.create = false; table.columns.add("messageId", sql.VarChar, { nullable: false }); table.columns.add("machineName", sql.VarChar, { nullable: false }); table.columns.add("messageStatus", sql.Int, { nullable: true }); table.columns.add("messageSentDate", sql.Date, { nullable: true }); machineListResult.recordset.forEach((item) =gt; { return table.rows.add(item.messageId, item.machineName, 0, currentDate); }); const listrequest = new sql.Request(transaction); listrequest.bulk(table, (err, result) =gt; { if (err) { console.log(err); } }); transaction.commit(async (err) =gt; { if (err) { res.status(500).jaon({ status: 500, err }); } res.status(200).send("Success"); }); }); });