C# 如何使用存储过程创建主子递归结构

C# 如何使用存储过程创建主子递归结构,c#,sql,sql-server,C#,Sql,Sql Server,我有三个相关的五个表,分别是父表和子表,另一个表存储子表中项目的信息 这是我的桌子: 父表 Parent Item ID PARENT Description width Parent item Thickness 500200 500200 Description 15 20 500201 500201 Description1 5 2

我有三个相关的五个表,分别是父表和子表,另一个表存储子表中项目的信息

这是我的桌子:

父表

  Parent Item ID   PARENT Description       width     Parent item Thickness
    500200          500200 Description        15              20
    500201          500201 Description1       5               2
    500202          500202 Description2       1.5            16
    500203          500203 Description3       15             20
子表

Parent Item ID    Item ID    Quantity     
   500200       100200      1
   500200       400200      1
   500200       300200      1
   300200       100200      1
子项详细信息表如下所示

表中存储的项目=100200在表X中,项目=400200在表Y中,项目=300200

表十

Item ID  DECRIPTION  THICKNESS  DIAMETER    WIDTH  
100200   100200DESC    0.15     1.5           5
表Y

Item ID  DECRIPTION     NAME       SIZE    
400200   400200DESC     XYZ       4X6      
表z

Item ID  DECRIPTION     NAME       SIZE    offset
300200   300200DESC     XYZ       3X9      0.375
我试图完成的是使用C创建物料清单结构或父到子递归结构

我想创建一个SQL Server视图或存储过程,如下所示

我希望看到这样的情况:父表、子表中的所有列,以及基于父子关系的表X、Y、Z中的一些列

      parent ID  PARENT Description  Parent Thickness   Item ID    Quantity     child DECRIPTION     THICKNESS    offset     SIZE
        500200     500200 Description     20             100200      1         100200DESC                 0.15
        500200     500200 Description     20             400200      1         400200DESC                                      4X6
        500200     500200 Description     20             300200      1         300200DESC                             0.375
        300200     300200 Description     20             100200      1         100200DESC                0.15                  3X9

如果要为单个项目查找多行,请使用不同的值查找每行。你可以试试:

SELECT 
  childTable.ParentItemID,
  parentTable.ParentDescription,
  childTable.ItemID,
  childTable.Quantity,
  fields.Description,
  fields.Name,
  fields.Value
FROM childTable
LEFT JOIN parentTable ON childTable.ParentItemID = parentTable.ParentItemID
LEFT JOIN (
      SELECT ItemID, Description, "THICKNESS" AS Name, THICKNESS AS Value FROM TableX
      UNION ALL
      SELECT ItemID, Description, "SIZE", SIZE FROM TableY
      UNION ALL
      SELECT ItemID, Description, "offset", offset FROM TableZ
      UNION ALL
      SELECT ItemID, Description, "DIAMETER", DIAMETER FROM TableX
      UNION ALL
      SELECT ItemID, Description, "WIDTH", WIDTH FROM TableX
) AS fields ON fields.ItemID = childTable.ItemID
ORDER BY childTable.ParentItemID, childTable.ItemID, fields.Name
通过调整联合选择,可以通过增加列数和减少行数来改变这一点

当然,当我处理绑定到基本表的动态额外值时,我通常只创建一个细节表,如下所示:

DetailTable:
  ItemID
  DetailTypeID
  DetailValue

当然,如果您确实希望将一组详细信息作为一行中的列,那么这样做可能需要一些努力

这似乎是一个非常基本的选择,从父表或子表中选择,并与所有其他表进行左连接。。。通常情况下,项将是主表,因为某些项可能没有父项,但任何父项都应至少有一个子项,否则它不是父项。通常,parentID是指向同一表中另一个itemID的指针。此外,如果可能的话,在SQL之外创建树本身的方法通常是正确的。@ebyrobmy的主要问题是根据子表项Id字段从表X、Y、Z获取信息,并将这些信息与父表信息一起显示。我可以让树工作我已经有了父子关系。获取X,Y,Z中的字段是我的挑战