1

我在服务器端有以下代码:

let query = `
       BEGIN TRANSACTION FOO_TRAN
       EXEC sp1_update ...,
       EXEC sp2_insert ...,
       EXEC sp3_update ...,
       EXEC sp4_delete ...,
       ...
       COMMIT TRANSACTION FOO_TRAN
       SELECT 1 as [@@@];
    `;
mssql.query(query, params, {
    success:  function (res) {
        if (res && res.length === 1 && res[0]['@@@'] == 1) {
            response.status(200).send({id: request.body.id});
        }
    }, error: (err)=>response.status(500).send(err)
});

然后客户端立即使用提供的请求修改内容id

问题:旧数据返回约 2-3 秒。我试图READ UNCOMMITED在随后的 SELECT 中指定,但它没有帮助 - 旧行与新行混合在一起。

4

1 回答 1

1

要将事务与 Azure 移动服务一起使用,您需要使用openon 方法mssql来获取支持事务的连接。请参阅此处的 open 方法文档。例如:

request.service.mssql.open({

    success: function(connection) {

        //start a transaction
        connection.beginTransaction(function(errTransaction) {

            if (errTransaction) {
                //handle the error and respond error
                connection.close();
                return;
            }

            //define a queryString and queryParams
            connection.query(queryString, queryParams, function(errQuery, results) {

                if (errQuery) {
                    //handle the error and respond error
                    connection.rollback();
                    connection.close();
                    return;
                }

                //success
                connection.commit();
                connection.close();
                //respond OK
            });                                         

        });
    },

    error: function(errOpen) {
        //handle the error
    }

});
于 2015-07-24T04:46:58.150 回答