C# 如何仅将重复数据插入事件日志?
我需要有关SQL查询问题的帮助。我有一个可以删除重复数据的查询,但我还需要将被删除的重复数据的记录创建到一个我对此一无所知的事件日志中。下面是我的学生表的一个示例。从下表中,您可以看到只有Alpha和Bravo是重复的C# 如何仅将重复数据插入事件日志?,c#,sql,asp.net,C#,Sql,Asp.net,我需要有关SQL查询问题的帮助。我有一个可以删除重复数据的查询,但我还需要将被删除的重复数据的记录创建到一个我对此一无所知的事件日志中。下面是我的学生表的一个示例。从下表中,您可以看到只有Alpha和Bravo是重复的 id Name Age Group ----------------------- 1 Alpha 11 A 2 Bravo 12 A 3 Alpha 11 B 4 Bravo 12 B 5
id Name Age Group
-----------------------
1 Alpha 11 A
2 Bravo 12 A
3 Alpha 11 B
4 Bravo 12 B
5 Delta 11 B
由于我正在将数据从A组复制到B组,我需要查找并删除B组中的重复数据。下面是我关于删除B组中重复数据的查询
DELETE Student WHERE id
IN (SELECT tb.id
FROM Student AS ta
JOIN Student AS tb ON ta.name=tb.name AND ta.age=tb.age
WHERE ta.GroupName='A' AND tb.GroupName='B')
下面是我的事件日志的一个示例,以及我希望执行的查询是怎样的
id Name Age Group Status
------------------------------------------
1 Alpha 11 B Delete
2 Bravo 11 B Delete
除了将整个B组数据插入事件日志,是否有任何查询可以将重复数据插入事件日志?在执行上述删除操作之前运行此操作。不确定如何确定哪一个是重复的,但您可以使用行号将其与非重复的列为1,然后插入行号大于1的所有内容
; WITH cte AS
(
SELECT Name
,Age
,[Group]
,STATUS = 'Delete'
,RID = ROW_NUMBER ( ) OVER ( PARTITION BY Name,Age ORDER BY Name)
FROM Student AS ta
JOIN Student AS tb ON ta.name=tb.name AND ta.age=tb.age
)
INSERT INTO EventLog
SELECT Name,Age,[Group],'Delete'
FROM cte
WHERE RID > 1
如果我们谈论的是Microsoft sql,关键是输出子句,更多详细信息请参见此处
在学生表中删除后需要创建基本触发器,该查询将在学生表中的任何删除过程后执行,并将删除的记录插入日志表中
create trigger deleted_records
on student_table
after delete
as
begin
insert into log_table
select d.id, d.Name, d.Age, d.Group, 'DELETED'
from DELETED d;
end
标记您正在使用的dbms。(该代码是特定于产品的。)我使用名称和年龄来确定重复项。如果姓名和年龄完全相同,则视为重复。
create trigger deleted_records
on student_table
after delete
as
begin
insert into log_table
select d.id, d.Name, d.Age, d.Group, 'DELETED'
from DELETED d;
end