开发者社区 问答 正文

Sybase表中的行号

Sybase数据库表没有自我更新行号的概念。但是,对于其中一个模块,我要求存在与数据库中每一行相对应的rownumber,以便max(Column)始终告诉我表中的行数。

我以为我会介绍一个int列,并继续更新此列以跟踪行号。但是,在删除的情况下更新此列时遇到问题。我应该在删除触发器中使用哪个SQL更新此列?

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 17:03:03 549 分享 版权
1 条回答
写回答
取消 提交回答
  • 删除触发器 CREATE TRIGGER tigger ON myTable FOR DELETE AS update myTable set id = id - (select count(*) from deleted d where d.id < t.id)
    from myTable t 为了避免锁定问题 您可以添加一个额外的表(连接到主表),如下所示:

    CREATE TABLE rowCounter (id int, -- foreign key to main table rownum int) ...并使用此表中的rownum字段。 如果将删除触发器放在此表上,则将大大减少发生锁定问题的可能性。

    大概的解决方案? 该表是否需要始终保持其行号最新? 如果没有,您可能有一份每分钟左右运行的作业,该作业检查行编号中的间隔并进行更新。

    问题:行号是否必须反映插入行的顺序? 如果不是这样,您可以进行更少的更新,而仅更新最新的行,将它们“移动”到空白处。

    如果您希望我发布有关这些想法的任何SQL,请发表评论。

    2019-11-18 17:03:10
    赞同 展开评论
问答分类:
问答地址: