2013-03-07 63 views
0

可以說我有一個數據庫表,它將一個Id與多個項目相關聯。 用最喜歡的食物說ID。 所以看起來在數據庫中更新已檢查的列表框值


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

1 1 
1 54 
1 543 
2  42 
2 4234 

我可以用我的檢查列表框

當我更新數據庫後,我編輯的項目選擇/取消選擇喜歡的食物值,我回去並刪除表1中的所有以前的條目,然後輸入全新的設置,或者有更好的方法來做到這一點?

回答

0
DELETE 
FROM favfood 
WHERE [email protected] 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 [email protected])) 
0

最簡單的方法是你的方法。但它也是最慢的並且會產生冗餘的數據庫操作。正確的方法是讓內存中的舊列表和新列表相應地創建delete,insert語句。

  1. 比較兩個列表並從兩個列表中刪除所有相同的值。
  2. 爲「舊」列表中的所有剩餘值創建DELETE語句。
  3. 爲'新'列表中的所有剩餘值創建INSERT語句。
+0

以及我想出一個辦法做到所有的刪除和添加到數據庫中,沒有必要使用列表.. – Max 2013-03-07 10:09:58

相關問題