根据特定条件生成唯一的连续序列号,而无需使用TABLOCKX

莎阿·莫哈莫德(Shah MOHAMOD)

每次向我的客户发送消息时,都会在名为“确认”的表中插入一个新条目。在插入期间,我需要获取当天发送给我的特定客户的确认的“ SequenceNumber”列的最大值。然后,此SequenceNumber递增1,并用于新记录。

约束条件是确保生成连续的唯一序列号,以用于白天发送给同一客户的确认。

我已经能够使用Serializable隔离级别和TABLOCKX提示来实现此目的。此解决方案有效,但不能在并发方面提供最佳性能。您知道如何实施此解决方案以提供更好的性能吗?

当前解决方案(封装在存储过程中)

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN

SELECT @SequenceNumber = MAX (SequenceNumber)                           
        FROM dbo.Confirmation WITH (TABLOCKX)
        WHERE   DATEDIFF(dd, CreationDate, @creationDate) = 0 AND
                ClientId = @recipientId

IF (@SequenceNumber IS NULL)
    SET @SequenceNumber = 1
ELSE
    SET @SequenceNumber = @SequenceNumber+1

INSERT INTO Confirmation (...) VALUES (..., @SequenceNumber, ...)

COMMIT TRAN
usr

serializable您不需要任何提示。该引擎为您提供了按序列执行。在这里,这等于锁定了希望存在的索引中的最后一行SequenceNumber基本上可以,但是您需要重试死锁。

我会用这个:

SELECT @SequenceNumber = MAX (SequenceNumber)                           
FROM dbo.Confirmation WITH (UPDLOCK, HOLDLOCK, ROWLOCK)
WHERE ...

为此,您不需要任何特定的隔离级别,因为可以HOLDLOCK强制进行序列化。这几乎总是无死锁的(几乎是因为引擎没有做出正式保证)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据特定条件生成唯一的连续序列号,而无需使用TABLOCKX

来自分类Dev

逐步生成唯一的序列号

来自分类Dev

如何使用VBA代码添加唯一的序列号

来自分类Dev

使用 Sqlite 中同一个表中的序列号制作特定行的副本,无需循环

来自分类Dev

生成序列号

来自分类Dev

如何使用jQuery生成序列号?

来自分类Dev

为批量生产的产品生成唯一的序列号

来自分类Dev

MS Dynamics365 - 生成自定义序列号,确保唯一性

来自分类Dev

查询以为行分配序列号,而无需分组在一起并且不更改行的顺序

来自分类Dev

如何创建特定格式的唯一序列号字符串?

来自分类Dev

Excel序列号生成器;根据一年中的星期顺序

来自分类Dev

Excel序列号生成器;根据一年中的星期顺序

来自分类Dev

awk根据开始和结束范围生成序列号:

来自分类Dev

RFID唯一序列号转换

来自分类Dev

如何使用“兄弟”设备的序列号(适用于没有唯一序列号的USB设备)制定udev规则?

来自分类Dev

按特定值分组并使用 xslt 1.0 生成序列号

来自分类Dev

LINQ生成序列号

来自分类Dev

XSLT序列号生成

来自分类Dev

根据特定条件选择唯一行数

来自分类Dev

根据特定条件检查连续值出现的次数

来自分类Dev

需要一种算法来生成序列号

来自分类Dev

如何使用JPA和MySQL生成序列号?

来自分类Dev

使用缓存在序列号生成中的问题

来自分类Dev

我想根据序列号以不带rbind的连续方式修改几列,因为列标题不同

来自分类Dev

根据序列号删除部分行

来自分类Dev

根据特定条件生成带有填充的行-熊猫

来自分类Dev

在特定条件下使用唯一列进行迁移?

来自分类Dev

使用向量中的特定条件检查唯一元素

来自分类Dev

如何在Yii的CGridview中以升序显示序列号而无需占用额外的数据库字段

Related 相关文章

  1. 1

    根据特定条件生成唯一的连续序列号,而无需使用TABLOCKX

  2. 2

    逐步生成唯一的序列号

  3. 3

    如何使用VBA代码添加唯一的序列号

  4. 4

    使用 Sqlite 中同一个表中的序列号制作特定行的副本,无需循环

  5. 5

    生成序列号

  6. 6

    如何使用jQuery生成序列号?

  7. 7

    为批量生产的产品生成唯一的序列号

  8. 8

    MS Dynamics365 - 生成自定义序列号,确保唯一性

  9. 9

    查询以为行分配序列号,而无需分组在一起并且不更改行的顺序

  10. 10

    如何创建特定格式的唯一序列号字符串?

  11. 11

    Excel序列号生成器;根据一年中的星期顺序

  12. 12

    Excel序列号生成器;根据一年中的星期顺序

  13. 13

    awk根据开始和结束范围生成序列号:

  14. 14

    RFID唯一序列号转换

  15. 15

    如何使用“兄弟”设备的序列号(适用于没有唯一序列号的USB设备)制定udev规则?

  16. 16

    按特定值分组并使用 xslt 1.0 生成序列号

  17. 17

    LINQ生成序列号

  18. 18

    XSLT序列号生成

  19. 19

    根据特定条件选择唯一行数

  20. 20

    根据特定条件检查连续值出现的次数

  21. 21

    需要一种算法来生成序列号

  22. 22

    如何使用JPA和MySQL生成序列号?

  23. 23

    使用缓存在序列号生成中的问题

  24. 24

    我想根据序列号以不带rbind的连续方式修改几列,因为列标题不同

  25. 25

    根据序列号删除部分行

  26. 26

    根据特定条件生成带有填充的行-熊猫

  27. 27

    在特定条件下使用唯一列进行迁移?

  28. 28

    使用向量中的特定条件检查唯一元素

  29. 29

    如何在Yii的CGridview中以升序显示序列号而无需占用额外的数据库字段

热门标签

归档