如果存在相同数据,则删除新记录

时间:2014-03-25 09:29:57

标签: sql records

如果之前创建的记录相同,我想删除新记录。

我的列是日期,时间和MsgLog。如果日期和时间相同,我想删除新的。

我需要帮助。

4 个答案:

答案 0 :(得分:0)

您可以使用查询在列中检查该值是否存在。如果存在,则可以显示记录已存在的消息。

答案 1 :(得分:0)

您可以通过在插入时检查重复来避免删除。 只需像这样修改插入过程,就不会输入重复项。

declare @intCount as int;

select @intCount =count(MsgLog) where (date=@date) and (time =@time )

if @intCount=0
begin

'insert procedure

end

> Edited

因为您需要在批量插入后删除重复的条目。想想这个逻辑,

  1. 创建临时表
  2. 按日期,时间
  3. 将LogId,日期,时间从表格插入临时表格
  4. 现在声明四个变量,@ preTime,@ PreDate,@ CurrTime,@ CurrDate
  5. 为临时表中的每个项循环,就像这样

    而 开始

    @ pkLogID ='获取当前行的LogID

    选择@ currTime =时间,@ currDate =来自tblTemp的日期,其中pkLogId = @ pkLogID'分配当前值

    '删除条件检查

    if(@ currDate = @ preDate)和(@ currTime = @ preTime)

    开始 从MAINTABLE删除pkLogId = @ pkLogID 端

    select @ preDate = @ currDate,@ preTime = @ currTime'将当前值指定为下一个条目的preValues

  6. 上面的策略是我们根据日期和时间对所有条目进行排序,因此重复数据会更接近,我们开始将每个条目与之前的条目进行比较,当匹配时我们删除了重复条目。

答案 2 :(得分:0)

阻止此类错误添加,您可以为表添加限制以确保唯一@Date @Time对;如果您不想更改数据结构(例如,您希望添加一次或两次此类限制的记录),则可以利用insert select counstruction。

-- MS SQL version, check your DBMS
insert into MyTable(
  Date,
  Time,
  MsgLog)
 select @Date,
        @Time,
        @MsgLog
  where not exists(
          select 1
            from MyTable
           where (@Date = Date) and
                 (@Time = Time)
        )

P.S。 想要删除新的等于不要插入新的

答案 3 :(得分:0)

您应该在数据库级别创建一个唯一约束,以避免无论谁写入您的数据库都无效数据。 确定您的架构非常重要。这样,无论有多少应用程序使用您的数据库,甚至有人只是手动编写一些插入内容,您都会安全无虞。

我不知道您使用的是哪个数据库,但在MySQL中可以使用以下DDL

alter table MY_TABLE add unique index(date, time);

在Oracle中你可以:

alter table MY_TABLE ADD CONSTRAINT constaint_name UNIQUE (date, time);

也就是说,你也可以(而不是代替)在插入新值之前做一些检查,以避免处理异常或通过避免对数据库进行不必要的访问来提高性能(例如,长度\空值可以很容易地处理应用程序级别。)