如何解决SQL Server 2000排他锁定
| 我的设置-一台具有两个SQL Server 2000实例(INSTANCE1和INSTANCE2)的服务器。每个实例具有1个DB,DBprod和DBstag。 我有一种情况,我需要为几个客户准备发票,因此我想在桌子上放一个排他锁,同时从INSTANCE1.DBprod.LastInvoiceNumber到INSTANCE2.DBstag提取发票编号,执行定律计算,准备发票并然后将发票(标题和详细信息)插入INSTANCE1.DBprod,然后更新INSTANCE1.DBprod.LastInvoiceNumber,为下一个客户重复,然后在我与所有客户联系完毕后解除锁定。 开始反式 独家锁定 INSTANCE1.DBprod.LastInvoiceNumber 打开客户游标 从客户那里获取下一步 从获取发票号 INSTANCE1.DBprod.LastInvoiceNumber 准备发票 将发票插入INSTANCE1.DBprod 更新 INSTANCE1.DBprod.LastInvoiceNumber (增加1) 从客户获取下一个(准备下一个 客户发票) 关闭客户游标 提交反邀请 释放锁定 INSTANCE1.DBprod.LastInvoiceNumber 这是我的解决方案 设置交易隔离级别 可序列化 有一个使用INSTANCE1.DBprod.LastInvoiceNumber的会计应用程序,这就是为什么我要独占锁定表,直到我完成所有发票的发布。解决方法
最简单的方法之一是使用sp_getapplock仅允许一个会话。其他会话将等待/失败
这与锁的粒度和隔离无关,在这种情况下通常更好。使用SERIALIZABLE并非唯一:您需要TABLOCKX。但是后来桌上的其他读者也被封锁了
sp_getapplock仅适用于此代码的范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。