具有定义起点的递归 SQL 查询

Recursive SQL Query with Defined Start Point

我正在尝试使用定义的起点进行递归查询。

这是我的 table 的一些示例数据,名为 Part_v_Container:

Serial_No   From_Container  Part_Key    Part_Operation_Key
1234                1233    5678         5
1233                1232    5678         4
1231                1230    5678         3
1230                NULL    5678         2

基本上我们会发送一个序列号,然后我需要在整个过程中跟踪所有之前的序列号 From_Container。在我的真实查询中,我将开始 Serial_No 是用户定义的变量。

这是我的尝试:

;WITH Recursive_cte AS
(SELECT 
  PContainer.Serial_No
  ,PContainer.From_Container
  ,PContainer.Part_Key
  ,PContainer.Part_Operation_Key

  FROM Part_v_Container AS PContainer
  WHERE Serial_No LIKE '1234'  -- Will be user defined variable

UNION ALL

SELECT 
    PContainer.Serial_No
    ,PContainer.From_Container
    ,PContainer.Part_Key
    ,PContainer.Part_Operation_Key  
  FROM Recursive_cte
  INNER JOIN
  Part_v_Container AS PContainer
  ON PContainer.From_Container = Recursive_cte.Serial_No 
  )

 SELECT * 
 FROM Recursive_cte

然而这只有returns排,Serial_No=1234排。我的真实数据集有数以千计的序列号,我需要能够从中挑选出要追溯的序列号,而不是对 table.

中的每个序列号进行递归的广泛查询

我已经尝试阅读几篇文章和示例来使它起作用,包括那一篇 here 但没有成功。

提前感谢您的帮助。

您颠倒了连接字段。

SQL Demo

;WITH Recursive_cte AS (
  SELECT 
    PContainer.Serial_No
  , PContainer.From_Container
  , PContainer.Part_Key
  , PContainer.Part_Operation_Key

  FROM Part_v_Container AS PContainer
  WHERE Serial_No = 1234  -- Will be user defined variable

UNION ALL

  SELECT 
      PContainer.Serial_No
    , PContainer.From_Container
    , PContainer.Part_Key
    , PContainer.Part_Operation_Key  
  FROM Recursive_cte
  INNER JOIN  Part_v_Container AS PContainer
     ON Recursive_cte.From_Container = PContainer.Serial_No 
)

SELECT * 
FROM Recursive_cte

输出

| Serial_No | From_Container | Part_Key | Part_Operation_Key |
|-----------|----------------|----------|--------------------|
|      1234 |           1233 |     5678 |                  5 |
|      1233 |           1232 |     5678 |                  4 |