我需要在sproc原子中进行以下步骤。这是一个近似简化的例子:
客户表(CustomerId,..,OrderMax)
产品表(ProductId,...)
AvailableProducts视图(ProductId和其他属性)
订单(CustomerId,OrderId)
@OrderMax
TOP @Ordermax
据我所知,整个事情和UPDLOCK都必须有一个事务。必须保护的是用于更新的Products表和用于插入的Orders表。但是,从这两个表构造的视图中查询行。
在上表中使这个序列原子化和安全更新并插入的正确方法是什么?
答案 0 :(得分:1)
需要将所有逻辑包装在Begin Transaction,Commit Transaction中。更新/插入并不真正关心数据是否来自连接,除非它以某种方式创建了无法回滚事务的情况,但它必须变得非常混乱以创建这样的情况。如果3.和4.具有复杂的逻辑,则可能会强制进入游标或.NET(但您可以使用常规查询执行一些相当复杂的逻辑)。