繁体   English   中英

节点:同时运行 2 个 sql 查询

[英]Node: run 2 sql queries at the same time

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

我想在同一个 function (或同一条路线)上进行 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 个更新? 或者我是否需要在第一次更新后创建另一个操作以在同一路线上使用(如果是这样,我该怎么做?)。

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

以下是我的建议:

  1. 阅读有关数据库事务的信息
  2. 将纯 SQL 替换为 ORM 例如SequelizeKnexJS ,它将帮助您通过查询调用方法来防止错误,例如await OsProduto.update({ where: { id: 0 }}, newData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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