避免重复行
问题描述:
我正在使用winform,并设置了一个计时器,以便我的表每5分钟更新一次。每隔5分钟,将来自table1的数据插入到table2中。但我不希望同一行插入两次。这不是用户输入,所以我甚至不能进行验证。我写了一个查询,但它不起作用。我知道我的写作方式是错误的。请纠正我的查询。避免重复行
我不想要程序。我只想以相同的方式查询。
using (SqlConnection conn = new SqlConnection(@"Data Source=DIPAYN;Initial Catalog=Highway;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "INSERT Alert(vehicle_no) SELECT vehicle_no FROM Entry WHERE next_expected_time <= GetDate() AND WHERE NOT EXISTS(select alert_id from Alert where alert_id = vehicle_no) ";
try
{
conn.Open();
Error = cmd.ExecuteNonQuery();
}
catch
{
Error = -1;
}
finally { conn.Close(); }
}
}
答
你可以说,当一个副本被发现,更新替代
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
编辑: 如果你只是不想错过复制
INSERT IGNORE INTO table (a,b,c) VALUES (1,2,3);
+0
我们可以说在DUPLICATE KEY UPDATE null; – Dee
+0
如果您只是想忽略重复项,请参阅编辑答案 –
刚上添加唯一约束表 – Strawberry
这两个表都有主键entry_id和alert_id。如果Entry表中的next_expected_time小于Get Date,那么只有它应该更新。但是你看,在下一次迭代中,条件将仍然相同。它将再次小于GetDate并再次插入。我只是想第二次避开它。我不认为你了解我。请尝试:( – Dee
'请尝试' - 有趣的 – Strawberry