在这种情况下如何有效地编写SQL查询?

时间:2014-04-28 19:42:57

标签: sql

我有一张表格列出学生及其职级。

像这样,

studentName, studentRank

现在,在我的UI客户端,我显示了按排名排序的列表框中所有学生的列表。

[ StudentName, StudentRank] 

现在,这个用户界面中的教授可以按照他的选择拖放并重新排序学生,然后“保存”

当保存发生时,我需要从ListBox中获取列表,然后对表进行更新,以便现在根据UI中的列表对学生进行排名。

要做到这一点,我现在正在做的最简单的方法是删除所有以前的行,然后通过在student表中的每次插入后增加排名逐个插入它们。 我觉得这是不必要的......但我不确定。

我想知道是否有更好的方法来实现这一目标?

2 个答案:

答案 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运行更新,这将比删除和插入数据更快。