请告知。我有一个查询 (@variables是本地变量或传递的参数)。
Delete a
From T_HISTORY a
JOIN #tempb ON a.p_no = b.p_no
Where a.run_date
between Convert(datetime, Convert(varchar, @run_date, 101)) and Convert(datetime, Convert(varchar, @run_date, 101) + ' 23:59:59')
and value_don= @value_don
然后我们有第二个查询-紧随其后
select a.*
into #test_delete
From T_HISTORY a
JOIN #tempb b ON a.p_no = b.p_no
Where a.run_date
between Convert(datetime, Convert(varchar, @run_date, 101)) and Convert(datetime, Convert(varchar, @run_date, 101) + ' 23:59:59')
and value_don= @value_don
希望是-取走临时表上连接的历史表中的所有内容,如果它们在运行日期(00:00 - 23:59:59)
和value_don等于我们传递的参数之间,则将其删除。
删除未删除的内容后剩下的所有内容,并且可能未删除的内容。该数据应放入a #test_delete
然后读取下一行代码
insert into LT_history_Audit_Log ( ... a bunch of columns ... )
select *
From #test_Delete
Where run_date between Convert(datetime, Convert(varchar, @run_date, 101)) and Convert(datetime, Convert(varchar, @run_date, 101) + ' 23:59:59')
and value_don= @value_don
因此,理论上应该发生的是,我们偶尔会有一行代码,也许有几行输入了audit_log表。
但是,我看到的是第一条语句中删除的每一行都输入到#test_delete
表中。
历史记录表中的数据由基于不同参数和运行时间的值组成。临时表限制了我们从历史表中提取的内容。基于此条件,我们要删除这些记录。这意味着历史记录表中可能有未删除的内容。我们想要这些记录的记录。根据我们的数据,通常最多只有几行。
但是,当插入#test_delete时,它会插入上一条语句中删除的每一行。每行。因此,如果删除了140条记录(这是我们的平均值),则#test_delete有140条记录,然后将它们输入到审核表中。
时间不是这里的问题,但是我会解决的。
样本数据
t_history
run_date p_no ....
2019-01-10 10:44:47.910 31811
2019-01-10 10:44:47.910 31817
...
#tempb
p_no
31817
31818
31819
在历史记录表中针对运行日期1-10-19的delete语句之后,应删除第二行,其中p_no = 31817,依此类推。第一行应该保留。
但是在#test_delete中出现的是两行,其中id = 31817和31811。情况并非如此。好像删除语句从未发生过。
答案 0 :(得分:0)
您的查询可能会丢失23:59:59.001之后的记录(取决于字段格式)
为什么不
@run_date <= a.run_date和a.run_date 我希望您所有名称中带有“ date”的对象都使用日期格式