0

您是否可以通过繁琐的驱动程序指定 READ_COMMITTED_SNAPSHOT 的事务隔离级别?我在这里看到了可用的隔离级别:http: //tediousjs.github.io/tedious/api-connection.html#function_beginTransaction

但是我知道READ COMMITTED中的SNAPSHOT选项与将隔离级别设置为SNAPSHOT是不一样的。也就是说,我没有看到一种将事务级别设置为此而不将其附加到传入的每个查询的方法,我显然不想这样做。

提前感谢您的帮助!

4

2 回答 2

1

我对无聊的事一无所知。但是,在 SQL Server 中,READ_COMMITTED_SNAPSHOT 不是事务隔离级别。READ_COMMITTED_SNAPSHOT 是 READ_COMMITTED 的数据库选项。因此,您需要执行以下操作:

SET READ_COMMITTED_SNAPSHOT ON

接着

SET TRANSACTION ISOLATION LEVEL READ_COMMITTED
于 2016-11-10T20:52:06.250 回答
1

是的,截至 2021 年,您似乎能够做到这一点。在这篇文章中,我指的是这个版本的 Node MSSQL 驱动程序:

"mssql": "^6.3.1"

https://www.npmjs.com/package/mssql

导入时有五种可能的隔离级别'mssql/lib/isolationlevel'

module.exports = {
  READ_UNCOMMITTED: 0x01,
  READ_COMMITTED: 0x02,
  REPEATABLE_READ: 0x03,
  SERIALIZABLE: 0x04,
  SNAPSHOT: 0x05
}

这是一种可能的方法来指定 READ_COMMITTED_SNAPSHOT 的事务隔离级别或通过从连接池中检索的连接的繁琐驱动程序的任何其他隔离级别:

  • 您从以下位置导入隔离级别mssql/lib/isolationlevel

    import { READ_UNCOMMITTED } from 'mssql/lib/isolationlevel'

  • 我们假设您有一个连接池,创建如下:

    export const poolPromise = new sql.ConnectionPool(dbConfig).connect();

  • 然后在每次连接检索后,您可以通过更改连接的配置选项来设置隔离级别:

      export async function executeSelectQuery(sqlQuery) {
          console.log('executeSelectQuery', sqlQuery)
          const conn = await createConn();
          conn.config.options.connectionIsolationLevel = READ_UNCOMMITTED
          const res = await conn.request().query(sqlQuery);
          return res ? res.recordset : [];
      }
    

我已经使用此代码来验证是否确实更改了隔离级别:

export async function executeSelectQuery(sqlQuery) {
    console.log('executeSelectQuery', sqlQuery)
    const conn = await createConn();
    conn.config.options.connectionIsolationLevel = READ_UNCOMMITTED
    const isolationLevelRes = await conn.request().query(`
    begin
        DBCC USEROPTIONS
    end
    `)
    console.log('isolationLevelRes after', isolationLevelRes.recordsets)
    const res = await conn.request().query(sqlQuery);
    return res ? res.recordset : [];
}

事实上,我可以在控制台上看到这个条目:

在此处输入图像描述

于 2021-04-15T12:42:53.833 回答