使用C#删除重复项

时间:2012-09-11 19:03:45

标签: c# sql

  

可能重复:
  SQL duplicates with different primary keys

我的查询返回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();
            }

2 个答案:

答案 0 :(得分:0)

您必须在PrimaryKey上退回gridView.,并在删除时传递所选的主键;

您必须确保在表格的数据库中将PKEY定义为PrimaryKey

您还可以在查询中添加DISTINCT,

SELECT DISTINCT ...

答案 1 :(得分:0)

如果您可以选择任意记录,则删除每个记录但每个记录只有一个记录的简单方法是使用主键的MAX并删除所有其他记录:

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