节点:同时运行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',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. SequelizeKnexJS 等 ORM 替换纯 SQL,它将帮助您通过调用 await OsProduto.update({ where: { id: 0 }},newData); 等方法进行查询来防止错误