0

假设我有一个将 Id 与多个项目相关联的数据库表。用最喜欢的食物说 ID。所以看起来像


Id  FoodId
----------

1    1
1    54
1    543
2     42
2    4234

ETC

我可以使用我的选中列表框选择/取消选择最喜欢的食物值

当我在编辑项目后更新数据库时,我是否返回并删除表中 ID 为 1 的所有先前条目,然后输入整个新集合,或者有更好的方法吗?

4

2 回答 2

0

最简单的方法是你的方法。但它也是最慢的,并且会产生冗余的数据库操作。正确的方法是让新旧列表在内存中创建相应deleteinsert语句。

  1. 比较两个列表并从两个列表中删除所有相同的值。
  2. 为“旧”列表中的所有剩余值创建DELETE语句。
  3. 为“新”列表中的所有剩余值创建INSERT语句。
于 2013-03-07T09:25:02.083 回答
0
DELETE 
FROM favfood
WHERE id=@Id and foodid not in(new_list_of_food_ids)

// serialized new_list_of_food_ids

INSERT INTO favfood(id,foodid)
(SELECT @Id, [int] 
FROM       OPENXML (@idoc, '/ArrayOfInt/int',1)
WITH ([int]  int '.')
where [int] not in (select foodid from favfood where id=@Id))
于 2013-03-07T10:14:27.563 回答