Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅将重复数据插入事件日志?_C#_Sql_Asp.net - Fatal编程技术网

C# 如何仅将重复数据插入事件日志?

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

我需要有关SQL查询问题的帮助。我有一个可以删除重复数据的查询,但我还需要将被删除的重复数据的记录创建到一个我对此一无所知的事件日志中。下面是我的学生表的一个示例。从下表中,您可以看到只有Alpha和Bravo是重复的

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