Node:同时运行2个sql查询



我有一个简单的api与我的移动应用程序通信,我有一些更新要做。

我想在同一功能(或同一路线)进行2次更新,但我不知道是否可能。

下面是dboperation部分:


async function updateCusto() {
try {
let pool = await sql.connect(config);
let updateCusto = await pool.request()
.input('input_parameter1', sql.Int, CodOS)
.input('input_parameter2', sql.Int, CodProduto)
.query("update osproduto set custounit=produto.precocusto, valorunitario=produto.precosugerido from OSProduto INNER JOIN Produto ON OSProduto.CodProduto = Produto.Codigo  where codproduto=@input_parameter2 and codos=@input_parameter1")
.query("Update OSProduto set sub=qtde*valorunitario where codos=@input_parameter1") //the second one, doenst work
return updateCusto.recordsets;
}
catch (error) {
console.log(error);
throw error;
}
}

这是路由部分:

router.route("/updateCusto").post((request, response) => {
CodOS = request.body.CodOs;
CodProduto = request.body.CodProduto;
dboperations.updateCusto(CodOS, CodProduto).then(result => {
console.log(result);
response.json("Update ok!");
})
.catch(error => response.json({ error }))
})

我该怎么做?是否有一种方法可以在同一操作上运行2个更新?或者在第一次更新之后,我需要在同一路由上创建另一个操作来使用(如果是,我该怎么做?)

这绝对是可能的,事实上我会把它作为一个事务,这样,如果其中一个查询失败,将进行回滚,以保持数据库的状态。

以下是我的建议:

  1. 查看数据库事务
  2. 用ORM(如Sequelize或KnexJS)代替纯SQL,它将帮助您通过调用await OsProduto.update({ where: { id: 0 }}, newData);等方法来防止查询错误

相关内容

  • 没有找到相关文章

最新更新