繁体   English   中英

使用ms sql将已删除的行从一个表移动到另一表(也具有触发器)

[英]Moving deleted rows from one table to another table (has the triggers as well) using ms sql

我有2个表,分别称为Active_QC1(id, req_name, req_type)Deleted_QC1(id, req_name, req_type) ,如果万一我将从Active_QC1表中删除数据, Active_QC1删除的数据应移入Deleted_QC1 两个桌子都可以有触发器,请问有人可以指导我吗?

我建议您向Active_QC1表添加一列,将其命名为Status_Flagvarchar类型,并将状态标志“ Y”或“ N”设置为已删除或未删除。 那么您可以尝试以下查询

查询1:

ALTER TABLE Active_QC1
ADD Status_Flag VARCHAR2(3 BYTE)

查询2:

UPDATE Active_QC1
SET Status_Flag = 'Y' 
WHERE id = <deleted records id>

查询3:

INSERT INTO Deleted_QC1 (id, req_name, req_type)
    SELECT id, req_name, req_type
    FROM Active_QC1
    WHERE Status_Flag = 'Y';

查询#4。

DELETE FROM Active_QC1
WHERE Status_Flag = 'N';

您可以在DELETE语句中使用OUTPUT子句 (microsoft.com)。 一个简单的delete语句的基本轮廓如下:

DELETE FROM Active_QC1 
OUTPUT DELETED.* INTO Deleted_QC1
WHERE id=5;

它的作用是删除Active_QC1id=5所有行,然后将这些行插入Deleted_QC1

一个例子:

CREATE TABLE #Active_QC1(id INT, req_name VARCHAR(128), req_type INT);
CREATE TABLE #Deleted_QC1(id INT, req_name VARCHAR(128), req_type INT);

INSERT INTO #Active_QC1(id,req_name,req_type)
VALUES
    (1,'engage',3),
    (2,'forward',5),
    (3,'obliterate',3),
    (4,'reply',5),
    (5,'delete',5);

DELETE FROM 
    #Active_QC1
OUTPUT 
    DELETED.id,
    DELETED.req_name,
    DELETED.req_type 
INTO 
    #Deleted_QC1(id,req_name,req_type)
WHERE 
    req_type=5;

SELECT*FROM #Deleted_QC1;

DROP TABLE #Deleted_QC1;
DROP TABLE #Active_QC1;

该脚本使用相同的表定义制作两个临时表#Active_QC1#Deleted_QC1 一些行被添加到#Active_QC1 DELETE语句删除req_type=5 #Active_QC1所有行,并将它们插入#Deleted_QC1 脚本最终选择#Deleted_QC1所有行。 结果如下:

╔════════╦══════════╦══════════╗
║     id ║ req_name ║ req_type ║
╠════════╬══════════╬══════════╣
║      2 ║ forward  ║        5 ║
║      4 ║ reply    ║        5 ║
║      5 ║ delete   ║        5 ║
╚════════╩══════════╩══════════╝

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM