簡體   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