0

可能的重复:
具有不同主键的 SQL 重复

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

2 回答 2

0

您必须返回PrimaryKey您的gridView.,并且当您删除时,您会传递您选择的主键;

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

您还可以将 DISTINCT 添加到您的查询中,

SELECT DISTINCT ...
于 2012-09-11T19:09:20.253 回答
0

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

DELETE FROM [userlist]
WHERE PKEY NOT IN (
    SELECT MAX(PKEY) pkey
    FROM [userlist]
    GROUP BY [user]
    )
于 2012-09-11T19:15:23.583 回答