Sql server 基于截止日期将事务记录从事务表移动到存档表-SQL Server

Sql server 基于截止日期将事务记录从事务表移动到存档表-SQL Server,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,在我们的应用程序中,我们有一个包含大量数据的事务表。因此,我们决定根据提供的截止日期将旧数据移动到存档表中(例如,如果截止日期是2013年,则将2013年之前的所有记录移动到存档表中)。我们有以下三个表Transaction_Details、Transaction_Header和Bill_Mapping(我没有包括所有表和列): Transaction\u Details表包含ID(事务ID)、Transaction\u Header\u ID和其他详细信息 Transaction\u Hea

在我们的应用程序中,我们有一个包含大量数据的事务表。因此,我们决定根据提供的截止日期将旧数据移动到存档表中(例如,如果截止日期是2013年,则将2013年之前的所有记录移动到存档表中)。我们有以下三个表Transaction_Details、Transaction_Header和Bill_Mapping(我没有包括所有表和列):

Transaction\u Details
表包含
ID
(事务ID)、
Transaction\u Header\u ID
和其他详细信息

Transaction\u Headers
包含有关该事务的其他详细信息 (例如,
Payment\u Type\u ID
GL\u Date
(我们希望将截止日期与此列进行比较)等)

票据映射
表包含与其他交易(贷方和借方)和
金额的交易映射

我需要一个存储过程,它将根据提供的截止日期返回所有事务(截止日期以下的所有事务)

示例:截止日期为2013-11-01 00:00:00.000

现在,如果您在上面的
Transaction\u Details
表(屏幕截图)中看到,标记为绿色的ID的
GL\u日期
(在
Transaction\u Headers
表中)小于截止日期

现在在
Bill_Mapping
表中,您可以看到交易id 5434125链接到5420422(总账日期:2013-10-05)和5415415(总账日期:2013-12-01)。因此,5420422低于截止日期,5415415高于截止日期。在这里,我不想将这3个事务ID移动到存档表(因为即使5434125和5420422低于截止日期,但5434125部分链接到5415415,后者高于截止日期)


所以规则是基于
bill\u映射
表的,即使一个交易id低于截止日期,并且部分映射到截止日期以上的任何交易。这样,我们就不必将所有链接的事务都移动到存档表中。

那么,深度超过1个节点(分层)的连接呢?你也有吗?trans A依赖于trans B,而trans B依赖于trans C,因此trans A依赖于trans C。归档的主要原因是什么?这是遗留应用程序。事务表包含大量数据。因此,在站点上显示事务数据以延长事务持续时间,例如从2008年到2018年,存储过程需要花费大量时间。所以我们决定将旧数据移动到归档表中。我们在站点中创建了一个用于存档的页面,用户需要从日期和截止日期(如2008年到2010年)进行传递。所以,我们将把这些数据移动到存档表中,我们不会在网站的交易详情页面上显示这些数据,只是我们必须处理总余额(基于总金额)。@KamilG。是的,我们有层次关系。A->B->C等。我在下面的帖子中找到了答案: