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 秒間返されます。後続の SELECT で指定しようとしましREAD UNCOMMITEDたが、役に立ちませんでした。古い行と新しい行が混在していました。

4

1 に答える 1

1

Azure Mobile Services でトランザクションを使用するには、openメソッド onmssqlを使用して、トランザクションをサポートする接続を取得する必要があります。ここで 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 に答える