如果之前创建的记录相同,我想删除新记录。
我的列是日期,时间和MsgLog。如果日期和时间相同,我想删除新的。
我需要帮助。
答案 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
因为您需要在批量插入后删除重复的条目。想想这个逻辑,
为临时表中的每个项循环,就像这样
而 开始
@ pkLogID ='获取当前行的LogID
选择@ currTime =时间,@ currDate =来自tblTemp的日期,其中pkLogId = @ pkLogID'分配当前值
'删除条件检查
if(@ currDate = @ preDate)和(@ currTime = @ preTime)
开始 从MAINTABLE删除pkLogId = @ pkLogID 端
select @ preDate = @ currDate,@ preTime = @ currTime'将当前值指定为下一个条目的preValues
端
上面的策略是我们根据日期和时间对所有条目进行排序,因此重复数据会更接近,我们开始将每个条目与之前的条目进行比较,当匹配时我们删除了重复条目。
答案 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);
也就是说,你也可以(而不是代替)在插入新值之前做一些检查,以避免处理异常或通过避免对数据库进行不必要的访问来提高性能(例如,长度\空值可以很容易地处理应用程序级别。)