Sybase数据库表没有自我更新行号的概念。但是,对于其中一个模块,我要求存在与数据库中每一行相对应的rownumber,以便max(Column)始终告诉我表中的行数。
我以为我会介绍一个int列,并继续更新此列以跟踪行号。但是,在删除的情况下更新此列时遇到问题。我应该在删除触发器中使用哪个SQL更新此列?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
删除触发器 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,请发表评论。