代码之家  ›  专栏  ›  技术社区  ›  Elizabeth

删除所有记录,然后将剩下的内容放入临时表中

  •  0
  • Elizabeth  · 技术社区  · 6 年前

    请告知。我有个问题 (@变量是局部变量或传递的参数)。

        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) 值_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
    

    但是,我看到的是第一个语句中删除的每一行都被输入到 #test_delete 表。

    但是,当insert into#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,依此类推。第一条线应该保留下来。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Cato    6 年前

    您的查询可能会错过23:59:59.001之后的记录(取决于字段格式)

    为什么不做呢

    @run_date<=a.运行日期和a.运行日期<dateadd(第1天,跑步日期)

    我希望所有名称中带有“date”的对象都使用日期格式