首页 > 解决方案 > 节点:同时运行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 个更新?或者我是否需要在第一次更新后创建另一个操作以在同一路线上使用(如果是这样,我该怎么做?)。

标签: javascriptnode.jssql-servernode-mssql

解决方案


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

以下是我的建议:

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

推荐阅读