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仅适用于此代码的范围。     

要回复问题请先登录注册