事实上,我已经找到了这个问题的答案,只是想记录下我的发现。
问题的原因如下:
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
类构造函数不同的是,pool.request
方法似乎不接受事务参数(有知识的人请告诉我们这是否属实)。