首页 > 解决方案 > 续集 azure sql 数据库回滚

问题描述

我正在使用带有 microsoft azure sql 数据库的 sequelize。我正在使用以下连接到数据库

let sequelize = new Sequelize(<DB_NAME>, <DB_USER>, <DB_PASS>, {
    dialect: 'mssql',
    host: 'xxxxxx.database.windows.net',
    operatorsAliases: false,
    encrypt: true,
    timestamps: true
  });

  sequelize.authenticate().then(() => {
    console.log('Connection established successfully.');
  }).catch(err => {
    console.error('Unable to connect to the database:', err);
  })

这建立了连接。我想在我的 sql 查询中使用事务。我使用以下代码对数据执行更新操作

const USERS= sequelize.define('USERS', <table details>);

await sequelize.transaction(async (t) => {
      await USERS.update(
          { status: 'USER REMOVED' },
          {
            where: { id: <ID>},
            returning: true,
          },
          {transaction : t}
        )
        throw "unsuccessful transaction"
  }).then(async function(){
    console.log("transaction successful")
  }
  ).catch(err => {
    console.error(err)
  })

执行后日志显示如下

Executing (b9f23ee86231fc03255b): BEGIN TRANSACTION;
Executing (b9f23ee86231fc03255b): ROLLBACK TRANSACTION;

转换为the transaction was rolled back. 但是当我检查 Azure SQL 数据库中的数据时,是否已更新。因此事务没有回滚。

我有什么遗漏或做错了吗?azure SQL 支持事务吗?

标签: sql-serverazuresequelize.jsazure-sql-databaseazure-sql-server

解决方案


静态模型的update方法只有两个参数:values因此options您应该在参数中传递事务options

await USERS.update(
          { status: 'USER REMOVED' },
          {
            where: { id: <ID>},
            returning: true,
            transaction : t
          }
        )

推荐阅读