您是否可以通过Tedious驱动程序指定READ_COMMITTED_SNAPSHOT的事务隔离级别?我在这里看到了可用的隔离级别:http://tediousjs.github.io/tedious/api-connection.html#function_beginTransaction
但我知道READ COMMITTED中的SNAPSHOT选项与将隔离级别设置为SNAPSHOT不同。也就是说,我没有看到将交易级别设置为此的方法,而没有将其附加到每个进入的查询中,我显然不会这样做。
提前感谢您的帮助!
答案 0 :(得分:1)
我对Tedious一无所知。但是,在SQL Server中,READ_COMMITTED_SNAPSHOT不是事务隔离级别。 READ_COMMITTED_SNAPSHOT是READ_COMMITTED的数据库选项。所以你需要做类似的事情:
SET READ_COMMITTED_SNAPSHOT ON
然后
SET TRANSACTION ISOLATION LEVEL READ_COMMITTED
答案 1 :(得分:0)
是的,到 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
}
以下是一种通过 Tedious 驱动程序为连接指定 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 : [];
}
确实我可以在控制台上看到这个条目: