插入对应于相同名称的不同 id 的记录列表后,如何修复我的数据库表



我插入一个记录列表到sql中,我希望ID对应于只有一个特定的名称,但在这种情况下,我想使它这样,如果一个名称是由2个不同的ID使用,我可以强制覆盖该ID,并将其值更改为任何ID有较低的数字。我不知道这是否清楚,但我可以举个例子。我希望当程序看到Adam也有NameID 2时,它将其ID更改为1。我正在用c#编程,但即使是伪代码也会帮助我,我只是在努力结合c#逻辑和sql查询。

记录:

NameID: 1姓名:Adam

NameID: 2名称:亚当

NameID: 3姓名:Sarah

我试着看看是否已经使用了主键,并使用数据阅读器来确认它是否有行。然后我看看这个名字之前是否也用过选择语句和数据阅读器,但我不知道如何从那里去,我试图了解如何用犀利的逻辑查询sql。如果有人能帮助我,我会非常感激这个概念让我陷入了相当多的困境。

好吧,我们假设您有一个主键,但正如其他人建议的那样,这样的操作最好在sql studio中完成。

但是,你可以这样写:

string strSQL =
$@"select firstName, count(*) as NameCount,
(SELECT MIN(t.Nameid) from People as T where t.Firstname = People.Firstname)
as LowNameID
FROM People
group by people.Firstname
having count(*) > 1";
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
conn.Open();
DataTable rstDuplicates = new DataTable();
rstDuplicates.Load(cmdSQL.ExecuteReader());
// process duplicates, set ones with higher number = same as lowest
cmdSQL.CommandText =
@"update People Set NameID = @NameID where FirstName = @FName
AND NameID <> @NameID";
cmdSQL.Parameters.Add("@NameID", SqlDbType.Int);
cmdSQL.Parameters.Add("@FName", SqlDbType.NVarChar);
foreach (DataRow OneName in rstDuplicates.Rows)
{
cmdSQL.Parameters["@NameID"].Value = OneName["LowNameID"];
cmdSQL.Parameters["@FName"].Value = OneName["FirstName"];
cmdSQL.ExecuteNonQuery();
}
}
}

我会考虑解决这个烂摊子。我建议删除重复的记录,并设置代码不允许相同的名称(如果这是您的目标)。换句话说,如果这是你的首要目标,就不要允许这样的添加。

最新更新