如何通过在Sql server中传递ID来获取活动记录

如何通过在Sql server中传递ID来获取活动记录,sql,Sql,我有以下数据库设计: Table Content ID Status ReplacedId 1 C NULL 2 C 1 3 C 2 4 A 3 5 A NULL 6 A NULL 7 A NULL 这里的逻辑如下 取消Id“1”,而是创建Id“2”,以便记录2在ReplacedId列中引用Id“1”。 就像iD 2被取消,iD“3”被创建一样,“3”被取消,iD“

我有以下数据库设计:

Table Content
ID     Status     ReplacedId

1   C       NULL
2   C       1
3   C       2
4   A       3
5   A       NULL
6   A       NULL
7   A       NULL
这里的逻辑如下

取消Id“1”,而是创建Id“2”,以便记录2在ReplacedId列中引用Id“1”。 就像iD 2被取消,iD“3”被创建一样,“3”被取消,iD“4”被创建。 取消记录状态为“C”,活动记录状态为“A”

我的要求:


我必须通过传递Id(1)来显示Id的活动记录,如果Id(1)是已取消的记录,否则如果它是活动记录,则显示相同的记录。

您的意思是,如果传递Id的1,2,3,则结果为4。如果你通过了4、5、6、7,你会得到同样的结果。
DECLARE @Table TABLE(
        RecordID INT,
        Status VARCHAR(20),
        ParentID INT
)

INSERT INTO @Table SELECT     1,'C',NULL
INSERT INTO @Table SELECT     2,'C',1
INSERT INTO @Table SELECT     3,'C',2
INSERT INTO @Table SELECT     4,'A',3
INSERT INTO @Table SELECT     5,'A',NULL
INSERT INTO @Table SELECT     6,'A',NULL

DECLARE @RecordID INT

SELECT @RecordID = 1

;WITH Selects AS (
        SELECT *
        FROM    @Table
        WHERE   RecordID = @RecordID
        UNION ALL
        SELECT  t.*
        FROM    @Table t INNER JOIN
                Selects s ON t.ParentID = s.RecordID
)
SELECT  *
FROm    Selects where Status = 'A'