2017-05-06 178 views
-2

我正在使用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(); } 
      } 
     } 
+2

刚上添加唯一约束表 – Strawberry

+0

这两个表都有主键entry_id和alert_id。如果Entry表中的next_expected_time小于Get Date,那么只有它应该更新。但是你看,在下一次迭代中,条件将仍然相同。它将再次小于GetDate并再次插入。我只是想第二次避开它。我不认为你了解我。请尝试:( – Dee

+1

'请尝试' - 有趣的 – Strawberry

回答

0

你可以说,当一个副本被发现,更新替代

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

如果您只是想忽略重复项,请参阅编辑答案 –