Cha*_*thJ 3 c# sql database sql-server relational-database
我想更新数据库中具有一对多关系的列表。
例如,有 100 多个科目,学生可以选择他想要的任何内容。假设下次该学生编辑他的选择。
对于这种情况,您更新数据库的方式是什么?我习惯做的是删除所有过去的选择并添加所有新选择的主题。这是非常简单的逻辑,但我只是想知道在性能方面是否有更好的方法来做到这一点。在我的例子中,'delete' 是单个数据库调用,插入 all 是单个数据库连接中的一个循环。
我知道我们可以添加一个逻辑来识别已删除的记录和新添加的记录。这样做真的值得吗?对于类似的情况你会怎么做?
谢谢!
为简洁起见,删除重新插入方法并没有什么问题,禁止子表中的外键挂钩或每次(重新)插入时触发触发器。
另一种方法是将新集合作为表值参数传递给 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 技能)