更新数据库中的一对多关系数据

Cha*_*thJ 3 c# sql database sql-server relational-database

我想更新数据库中具有一对多关系的列表。

例如,有 100 多个科目,学生可以选择他想要的任何内容。假设下次该学生编辑他的选择。

对于这种情况,您更新数据库的方式是什么?我习惯做的是删除所有过去的选择并添加所有新选择的主题。这是非常简单的逻辑,但我只是想知道在性能方面是否有更好的方法来做到这一点。在我的例子中,'delete' 是单个数据库调用,插入 all 是单个数据库连接中的一个循环。

我知道我们可以添加一个逻辑来识别已删除的记录和新添加的记录。这样做真的值得吗?对于类似的情况你会怎么做?

谢谢!

Ric*_*iwi 5

为简洁起见,删除重新插入方法并没有什么问题,禁止子表中的外键挂钩或每次(重新)插入时触发触发器。

另一种方法是将新集合作为表值参数传递给 SP 到 Sql Server,然后使用两个查询进行更改

delete many_table
where studentid=@studentid and someid not in (select someid from @tableparam p)

insert many_table(studentid, someid)
select @studentid, p.someid
from @tableparam p left join many_table t on p.someid=t.someid and t.studentid=@studentid
where t.someid is null
Run Code Online (Sandbox Code Playgroud)

(SQL Server 2008 有更优雅的 MERGE 语法,这是另一个选项,进一步测试您的 TSQL 技能)

  • 只要你的删除/插入是原子的就可以了。如果您没有在承诺控制下执行此操作,并且有人在您的更新过程中读取了该表,您可能会遇到麻烦。 (2认同)