[英]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_Flag
的varchar
类型,并将状态标志“ 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_QC1
中id=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.