Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 数据库并发性:字段与UPDLOCK_Sql Server_Concurrency_Commit_Rollback - Fatal编程技术网

Sql server 数据库并发性:字段与UPDLOCK

Sql server 数据库并发性:字段与UPDLOCK,sql-server,concurrency,commit,rollback,Sql Server,Concurrency,Commit,Rollback,我正在使用SQL Server在Omnis中开发企业资源规划 多个用户将读取更新删除ecords,因此我必须处理并发性 我认为有两种可能的解决办法。我已经知道如何处理这两个问题了。 我只是问你哪一个更适合你 自动解决方案 设置事务模式=自动,因此BEGIN-COMMIT-ROLLBACK事务由软件自动完成,但根本没有并发控制。 我可以在每个表中使用一个字段,其中包含阻止记录的用户的名称,如果为空,用户可以更新记录,我将用户名存储在该字段中, 如果该字段不为空,我将显示阻止该字段的用户 手动解决方

我正在使用SQL Server在Omnis中开发企业资源规划

多个用户将读取更新删除ecords,因此我必须处理并发性

我认为有两种可能的解决办法。我已经知道如何处理这两个问题了。 我只是问你哪一个更适合你

自动解决方案 设置事务模式=自动,因此BEGIN-COMMIT-ROLLBACK事务由软件自动完成,但根本没有并发控制。 我可以在每个表中使用一个字段,其中包含阻止记录的用户的名称,如果为空,用户可以更新记录,我将用户名存储在该字段中, 如果该字段不为空,我将显示阻止该字段的用户

手动解决方案 设置transaction mode=Manual,因此我必须处理BEGIN-COMMIT-ROLLBACK,但是我可以使用UPDLOCK和ROWLOCK之类的东西

您是否认为使用字段而不是带ROWLOCK的UPDLOCK是一种糟糕的做法? 还有其他的赞成和反对意见吗


谢谢

这不是场对战升级锁。问题应该是什么是业务逻辑,以及您将以何种方式实现它

你到底有哪些并发问题,应该如何解决

如果存在两个或多个并发代码,您的代码应该执行什么操作:

  • 相同数据的插入
  • 同一行上的更新
  • 删除和更新同一行
  • 这里有更多mb
那么您的答案是以下问题:
是否执行
自动解决方案
是否执行您需要的操作?或者您必须执行手动控制?

如果用户A正在更新一行,其他用户只能读取该行。如果他们试图更新或删除同一行,屏幕上会显示一条消息,通知用户A正在更新该记录。我需要的就是这个。你不应该把交易和屏幕上的信息混在一起。您不希望事务由用户输入控制。最好在应用程序中编写所有“屏幕锁定”逻辑。示例:用户编辑行-写入日志,第二个用户无法编辑该行,日志将更新关于行释放的信息。如果您正确,我将使用手动模式。我将负责begin-commit-rollback,并且我将使用一个特定字段来指示哪个用户正在修改记录。谢谢