【发布时间】:2015-07-16 22:19:37
【问题描述】:
我正在使用一个生成发票编号的应用程序(按顺序基于几个参数),到目前为止,它一直在使用带有序列化交易的触发器。因为触发器相当“重”,它设法使插入查询的执行超时。
我现在正在研究解决该问题的方法,到目前为止,我已经到了我有一个执行插入的存储过程并且在插入之后我有一个隔离级别可序列化的事务(顺便说一句适用仅针对该事务,还是应该在事务提交后将其设置回来?):
- 获取号码
- 如果找不到,则插入该表,如果找到则更新数字(增量)
- 提交事务
我想知道是否有更好的方法来确保数字被使用一次并在表格锁定的情况下获得增量(只有数字表格被锁定,对吗?)。
我阅读了有关 sp_getapplock 的信息,这会是实现我目标的更好方法吗?
【问题讨论】:
-
我认为没有看到问题出现在代码中的位置,您将得到的最好结果就是在黑暗中开枪。
-
如果序列号只有一个来源,请使用标识列。如果有多个源并且您的存储过程每次都选择正确的源,请使用sequences。
-
@GSerg 看起来很有趣,我不是数据库专家,我根本不知道序列。从那个解决方案中我还需要一件事——我必须能够轻松地修改下一个序列号的编号。我能用序列做到这一点吗?
-
@GSerg 我不能使用序列,我必须让它与 SQL Server 2008 兼容。
-
@user1970395 目前还不清楚您的设置是什么。您如何计算数字,将它们存储在何处以及为何存储它们?
标签: sql sql-server tsql transactions