【问题标题】:Approach to Insert only new records and exclude insertion of deleted records仅插入新记录并排除插入已删除记录的方法
【发布时间】:2021-02-24 06:14:58
【问题描述】:

我在使用以下查询在表中执行插入时需要帮助我在 hConn 表中插入记录

--Insert Into Conn table
INSERT INTO hConn
 (hp10_id, hp09_id, hp_e_id,hp_s_id, hp_createddate, hp_updatedate,hp_insertby,hp_updateby)
 
SELECT 
p10_id, p09_id, e_id,s_id, Getdate() AS hp_createddate, Getdate() AS hp_updatedate,
'1' AS hp_insertby,'1' AS hp_updateby
FROM   p10_table
       INNER JOIN p09_table
               ON p10_p09_id = p09_id
       INNER JOIN s_table
               ON s_p_id = p10_id
       INNER JOIN e_table
               ON p_s_id = p10_id
WHERE 
       e010_lan_code = 'EN'
       AND e009_lan_code = 'EN' 
EXCEPT
SELECT hp10_id, hp09_id, hp_e_id, hp_s_id, Getdate(), Getdate(), 1, 1
FROM   hConn 
GO

在这一步之后,我使用以下语句从 hConn 中删除 2 条记录

IF EXISTS(SELECT * 
          FROM   hConn 
          WHERE  hp10_id = 15 
                 AND hp_e_id = 48 
                 AND hp_s_id = 4) 
  BEGIN 
      DELETE FROM hConn 
      WHERE  hp10_id = 15 
             AND hp_e_id = 48 
             AND hp_s_id = 4 
  END 


IF EXISTS(SELECT * 
          FROM   hConn 
          WHERE  hp10_id = 11 
                 AND hp_e_id = 48 
                 AND hp_s_id = 4) 
  BEGIN 
      DELETE FROM hConn 
      WHERE  hp10_id = 11 
             AND hp_e_id = 48 
             AND hp_s_id = 4 
  END 
  
  GO
  

下次执行插入脚本时,我不希望将这两条记录插入hConn 表中,只希望插入脚本的select 查询中的新记录但在执行语句时, 2 条已删除的记录也被添加,我有点不想再次将它们添加到 hConn 表中。 有没有其他方法可以解决这个问题,而不是每次都删除记录?

将删除的记录存入另一个表并在插入hConn表之前检查是否正确?

【问题讨论】:

  • 您可以在 INSERT 的 WHERE clouse 中包含一个条件来过滤掉这些数据。
  • 添加位列Deleted并设置。然后在除此处以外的所有地方过滤掉它。
  • @DaleK 我也在考虑同样的方法,但有人告诉我这不是一个好的设计
  • @Serg 可能会有更多这样的记录,我将来需要删除,因此不确定这是否适合我
  • 顺便说一句:您不需要IF EXISTS 检查。只需运行DELETE。首先检查是不必要的额外步骤 - 因为DELETE 无论如何都会这样做(如果存在行,它将删除行,或者如果没有与WHERE 子句匹配的记录,则会影响零行。

标签: sql sql-server tsql


【解决方案1】:

更简单的方法是使用游标并获取一行然后检查删除条件,如果满足条件则创建删除 sql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    相关资源
    最近更新 更多