您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Server-从多个客户端向表中同时插入-检查限制和阻止

SQL Server-从多个客户端向表中同时插入-检查限制和阻止

我认为声明式地执行此操作是不可能的。

如果保证所有插入都将通过存储过程,并且一旦插入后就不会更新SaleValue,则应执行以下操作(我组成了表名和列名,因为最初的问题中未提供这些名称

DECLARE @SumSaleValue MONEY

BEGIN TRAN

SELECT @SumSaleValue = SUM(SaleValue)
FROM dbo.Orders WITH (UPDLOCK, HOLDLOCK)
WHERE TransactionId = @TransactionId

IF @SumSaleValue > 1000
    BEGIN
    RAISERROR('Cannot do insert as total would exceed order limit',16,1);
    ROLLBACK;
    RETURN;
    END

/*Code for INSERT goes here*/

COMMIT

所述HOLDLOCK给序列化的语义和锁定的整个范围相匹配的TransactionIdUPDLOCK锁定在相同范围从而减少死锁的危险防止两个并发事务。

上的索引TransactionId,SaleValue将最好支持查询

SQLServer 2022/1/1 18:52:57 有335人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶