【发布时间】: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