2012-09-11 59 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] 
    )