我有一张表格列出学生及其职级。
像这样,
studentName, studentRank
现在,在我的UI客户端,我显示了按排名排序的列表框中所有学生的列表。
[ StudentName, StudentRank]
现在,这个用户界面中的教授可以按照他的选择拖放并重新排序学生,然后“保存”
当保存发生时,我需要从ListBox中获取列表,然后对表进行更新,以便现在根据UI中的列表对学生进行排名。
要做到这一点,我现在正在做的最简单的方法是删除所有以前的行,然后通过在student表中的每次插入后增加排名逐个插入它们。 我觉得这是不必要的......但我不确定。
我想知道是否有更好的方法来实现这一目标?
答案 0 :(得分:0)
如果您担心最小化数据库更改,则可以跟踪哪些行具有更改的排名,并仅对这些更新进行更新。如果这是值得的,取决于您的数据规模以及您将承担多少(如果有的话)记录。
例如,如果您有10名学生并且交换等级5和6,则最小更新仅影响2行,而您的默认删除和添加需要10次删除和10次插入。如果您将学生从第8级提升到第5级,则会有更多更新,但仍然更少:
UPDATE student SET rank = rank + 1 WHERE ranking BETWEEN 5 AND 7
UPDATE student SET rank = 5 WHERE name = @name
但是,确定最佳SQL很复杂,可能不值得付出努力。可能最好只更新更改的行。
如果删除并重新插入,则可能需要TRUNCATE而不是DELETE。并在事务中执行以确保删除确实有效,然后插入失败。
答案 1 :(得分:-1)
包含在您的表字段中,例如studentid,然后通过studentid运行更新,这将比删除和插入数据更快。