[英]Transaction not rolling back as expected using the mssql module in Node.js
我實際上已經找到了這個問題的答案,並且只想記錄我的發現。
以下是導致問題的原因:
let transaction = new sql.Transaction(pool);
await transaction.begin();
await pool.request (transaction).query (" *** SOME SQL *** ");
await transaction.rollback();
事務根本不會回滾。
為了解決這個問題,我最終使用了new sql.Request (transaction)
而不是pool.request (transaction)
。 代碼將如下所示:
let transaction = new sql.Transaction(pool);
await transaction.begin();
await new sql.Request (transaction).query (" *** SOME SQL *** ");
await transaction.rollback();
我沒有深入了解連接池如何工作的實際機制,但似乎與sql.Request
class 構造函數不同, pool.request
方法不帶事務參數(有知識的人請告訴我們如果這是真的)。
更新
我回去查看了mssql模塊的源碼,發現Transaction class中有一個請求方法,所以另一種解決方法是:
let transaction = new sql.Transaction(pool);
await transaction.begin();
await transaction.request().query (" *** SOME SQL *** ");
await transaction.rollback();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.