我有一个表X和表Y。表Y是历史表。每当在表X中插入、更新或删除一条记录时,它都会被插入到历史表Y中。现在,我正在尝试用丢失的记录来更新历史表。为此,我编写了一个减号查询来获取差异。我必须将所有这些记录插入到历史表中。我尝试使用“merge”和其他形式的insert语句,但无法获得准确的输出。
例如:
表X
A B C
EMP NO EMP NAME EMP ADD
表Y
A B C D E F
EMP NO EMP NAME EMP ADD st dt end
我试图在Server 2000中使用更新触发器,以便当更新发生时,我将一行插入到历史表中,因此我将所有历史记录保留在表中:
CREATE Trigger trUpdate_MyTable ON MyTable
FOR UPDATE
AS
INSERT INTO
[MyTableHistory]
(
[AuditType]
,[MyTable_ID]
,[Inserted]
,[LastUpdated]
,[LastUpdatedBy]
在插入目标表之前,我已经获得了一组临时表,在这些表中,我接受数据、清理它们并清除它们。目标表有一个主键约束,我要插入的是主键。
在插入之前,我会检查目标表中是否没有主键。根据主键的缺位,我只插入目标表中没有的记录:
INSERT INTO Target
SELECT
primKey
, user_state
, test_state
FROM
myStagingTable3
至此,stagingTable3仅具有使用以下where子句在目标表中不存在的数据:
WHERE
primKey not i
我正在使用下面的查询将记录插入到表中。 DELETE FROM Table1;
INSERT into Table1 (F1,f2,f3...) SELECT * FROM TABLE2 WHERE...... 问题是,由于许多条件,SELECT查询需要一些时间来获取,而记录已经从Table1中删除,在等待SELECT查询结果并插入到table1中的过程中,实时记录可能无法在客户端显示。 我需要先选择record,然后从table1中删除记录,然后将所选记录插入到table1中。有谁能帮帮我吗?
我试图在mysql中创建一个触发器,在将新记录插入表A之后,用表C中的值更新表B。我尝试了以下代码的一些变体,但无法使其工作。谁能给我指明正确的方向?
delimiter //
CREATE TRIGGER updateC AFTER Insert ON Table A
FOR EACH ROW in TableB
BEGIN
IF TableB.Group = 1 THEN
Insert into TableC(inserthere) values (TableB.AddThis);
E
我有一个从多个表派生的临时表,它需要插入到两个表(T1和T2)中。T1有一个主键(自动生成),它必须作为外键插入到T2中(一对多关系)
我知道如果我使用了下面的insert语句
INSERT INTO T1 (.....)
SELECT (.....) FROM X
我无法在T2中使用scope_identity,因为它只会给我最后一个自动生成的ID。
除了使用游标或循环遍历每一行之外,还有什么选项可以确保跨表拆分的记录之间的关系保持不变?仅供参考,此插入过程定期发生,并且可能包含两个表中的1000+记录。