如何通过在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'