我们有一个带有SQL2008数据库的ASP.NET站点。
我正在尝试在当前系统中实现事务。
我们有一个方法是将一个新行插入一个表(Table_A),它可以在事务中正常工作。如果抛出异常,它将进行回滚。
我的问题是,另一个用户无法在同一时间内使用Table_A执行任何操作 - 可能是因为它被锁定了。
我可以理解为什么事务必须锁定新行,但我不希望它锁定整个表 - 强制user_B等待user_A完成。
我已尝试在事务上设置isolationlevel ReadUncommitted和Serializable,但它不起作用。
所以我想知道我是否还需要重写所有的select方法,所以他们能够选择除了新行之外的所有行?
示例:
所以我想我不知何故需要将用户B的select查询从“select all query”重写为“选择所有未绑定到事务查询的行”。 :)
任何提示都很受欢迎,谢谢。
答案 0 :(得分:1)
您需要更改您的选择,而不是对正在执行插入的事务进行更改。
你可以
正如我所说,所有这三个选项都是你应用于SELECT的东西,而不是INSERT。
最后一个选项可能是启用SNAPSHOT isolation,并更改数据库默认值以使用它(如果尚未使用快照隔离构建/测试应用程序,可能会在此处包含许多警告上)
答案 1 :(得分:0)