Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何执行事务以及不锁定表以便其他人执行更改?_Sql_Sql Server_Asp.net Mvc_Database_Database Design - Fatal编程技术网

Sql 如何执行事务以及不锁定表以便其他人执行更改?

Sql 如何执行事务以及不锁定表以便其他人执行更改?,sql,sql-server,asp.net-mvc,database,database-design,Sql,Sql Server,Asp.net Mvc,Database,Database Design,我正在制作Web应用程序,我希望像Marks_table这样的表格随时可用,这样即使有一位老师正在上传分数,学生也不应该被阻止从该表格中查看他们的分数。例如,学生a的表中分数为5 现在,当学生A执行查询时,他将看到5年级 现在,当教师忙于处理该表上的事务时,学生在教师完成之前不会从查询中获得任何结果,因为他的事务正在锁定该表 你想要的是,当老师在做事务时,学生从他的查询中得到结果,他只会看到一个值5,因为这是这个表中他最后提交的值,对吗? 换句话说,学生可以按F5键,在老师提交新的价值观之前看到

我正在制作Web应用程序,我希望像Marks_table这样的表格随时可用,这样即使有一位老师正在上传分数,学生也不应该被阻止从该表格中查看他们的分数。

例如,学生a的表中分数为5 现在,当学生A执行查询时,他将看到5年级

现在,当教师忙于处理该表上的事务时,学生在教师完成之前不会从查询中获得任何结果,因为他的事务正在锁定该表

你想要的是,当老师在做事务时,学生从他的查询中得到结果,他只会看到一个值5,因为这是这个表中他最后提交的值,对吗? 换句话说,学生可以按F5键,在老师提交新的价值观之前看到他们的旧价值观,这听起来像是一种正常的做事方式

如果是这样,您可以尝试这样做:只需要在数据库中执行一次

ALTER DATABASE yourdatabase SET READ_COMMITTED_SNAPSHOT ON;
见此:


但也要记住,数据库中表上的所有事务都应该尽可能短,这实际上可以从一开始就避免这个问题。如果刷新后必须等待半秒才能显示结果,则没有学生会抱怨,如果必须等待分钟,则会抱怨。

引用表的查询可以使用with NOLOCK查询提示,尽管这可能会导致数据不一致的其他问题。如果您只更新一行,那么开销可能很小。将WITHNOLOCK添加到读取查询?我正在添加多行显示使用cSo是否可以让我弄清楚这一点。您想允许学生查看他们的分数,即使教师当前正在提交更正的值?这意味着您有意提供可能无效或不正确的结果。这看起来真的是个好主意吗?我正在使用TransactionScope对象来完成和执行事务,这会自动解决我的问题吗?我不熟悉TransactionScope对象,但由于这个alter语句正在改变数据库读取记录的方式,我想它会的