2012-09-11 91 views
0

可能重複:
SQL duplicates with different primary keys刪除重複使用C#

我的查詢返回gridview的所有重複。但是,當我從副本中選擇一條記錄時,兩條記錄都將被刪除。當我在用戶列表中使用直接選擇所有用戶時,刪除選項將僅刪除選定的行。我懷疑當我從dup中選擇一條記錄時,它使用select命令,因此抓取兩個主鍵。

SelectCommand="SELECT [PKEY], [user] FROM [userlist] 
      WHERE LogonName IN (
       SELECT [user] 
       FROM [userlist] 
       GROUP BY [user] 
       HAVING (COUNT([user]) > 1))" 
DeleteCommand="DELETE FROM [userlist] WHERE [PKEY] = @PKEY" > 

的複選框,採用直板選擇時的作品添加代碼背後:

if (checkbox.Checked) 
      { 
       int PKEY = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value); 
       SqlDataSource1.DeleteParameters["PKEY"].DefaultValue = PKEY.ToString(); 
       SqlDataSource1.Delete(); 
      } 
+0

每行有什麼獨特之處,還是它們是完全重複的? –

+0

請不要在標題中加入標籤信息。 StackOverflow有一個非常有效的標籤系統,可以自行分類問題;該系統甚至知道如何將這些信息正確地提供給Google。通過將標籤輸入到問題的「標籤」區域而不是標題來正確使用標籤,並使用標題中的額外空間來改善問題本身。謝謝。 –

+0

這有幫助。我使用了不同的查詢。 可能重複的SQL複製與不同的主鍵 - Cocowalla – user1188241

回答

0

您必須對您的gridView.返回PrimaryKey,當你刪除你通過選定的PrimaryKey;

必須確保PKEY被定義爲PrimaryKey的,在你的數據庫上的表

您還可以添加DISTINCT到您的查詢,

SELECT DISTINCT ... 
+0

是的,PKEY是SQL表中的主鍵 'SqlDataSource1.DeleteParameters [「PKEY」]。DefaultValue = PKEY.ToString();' 'SqlDataSource1.Delete ();' – user1188241

+0

DataKeyNames =「PKEY」在我的gridview中。我需要返回重複項,以便用戶可以看到要刪除哪一個。 – user1188241

0

如果你可以選擇任意的記錄,一個簡單的刪除每個記錄的方法除了每個組的一個記錄是取主鍵的MAX並刪除所有其他記錄:

DELETE FROM [userlist] 
WHERE PKEY NOT IN (
    SELECT MAX(PKEY) pkey 
    FROM [userlist] 
    GROUP BY [user] 
    )