Массовая вставка узла mssql как часть транзакции

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