【问题标题】:How to create and view the results of a temp table from a hierarchical (recursive) query in SQL Server 2008 R2如何从 SQL Server 2008 R2 中的分层(递归)查询创建和查看临时表的结果
【发布时间】:2013-06-12 17:42:03
【问题描述】:

美好的一天。

我试图在从分层查询中获取结果后生成一个临时表,然后在同一个查询中查看这些结果(因此递归查询从表中获取我想要的结果,然后是 CREATE TABLE查询显示这些结果)。

递归让我得到我想要的结果,我遇到的问题是让查询显示这些结果。我正在尝试在递归之后构建临时表查询。但是,数据返回只是向我展示了递归的结果。

感谢您的帮助!

查询:

WITH orgCode_hierarchy (ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL) AS
(
-- Initializing:
      SELECT h_base.ParentOrgCodeID, h_base.OrgCodeID, h_base.OrgCode, h_base.OrgName, cast('::' + h_base.OrgCode  + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, 0 AS LEVEL
      FROM L_OrgCode h_base
      WHERE h_base.OrgCode is not null

      UNION all

-- Executing recursive: 
      SELECT h_child.ParentOrgCodeID, h_child.OrgCodeID, h_child.OrgCode, h_child.OrgName,  cast (ho.OrgCodeSortOrder + CASE WHEN left(h_child.OrgCode, 2) = '::' THEN '::' ELSE '' END  + h_child.OrgCode + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, LEVEL + 1 AS LEVEL
      FROM L_OrgCode h_child
      inner join orgCode_hierarchy ho on h_child.ParentOrgCodeID = ho.OrgCodeID
)     

-- CTE:
SELECT DISTINCT ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL
FROM orgCode_hierarchy
WHERE OrgCode LIKE '2.2.1.1%'  
-- ORDER BY 1  
ORDER BY OrgCode, 1 

--Create temp tbl for the name/org code search
    CREATE TABLE #OrgCodesHier
    (
        OrgCodeID int, 
        OrgCode_Level int,
        OrgName varchar(255),
        OrgCode varchar(50),
        ParentOrgCodeID varchar(50)

        PRIMARY KEY (OrgCode) 
    )

    INSERT INTO #OrgCodesHier (OrgCodeID, OrgCode_Level, OrgName, OrgCode, ParentOrgCodeID)

    SELECT * FROM #OrgCodesHier

【问题讨论】:

    标签: sql sql-server-2008 tsql recursive-query temp-tables


    【解决方案1】:

    如果我理解正确的话……

        --Create temp tbl for the name/org code search
            CREATE TABLE #OrgCodesHier
            (
                OrgCodeID int, 
                OrgCode_Level int,
                OrgName varchar(255),
                OrgCode varchar(50),
                ParentOrgCodeID varchar(50)
    
                PRIMARY KEY (OrgCode) 
            )
    
        ;WITH orgCode_hierarchy (ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL) AS
        (
        -- Initializing:
              SELECT h_base.ParentOrgCodeID, h_base.OrgCodeID, h_base.OrgCode, h_base.OrgName, cast('::' + h_base.OrgCode  + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, 0 AS LEVEL
              FROM L_OrgCode h_base
              WHERE h_base.OrgCode is not null
    
              UNION all
    
        -- Executing recursive: 
              SELECT h_child.ParentOrgCodeID, h_child.OrgCodeID, h_child.OrgCode, h_child.OrgName,  cast (ho.OrgCodeSortOrder + CASE WHEN left(h_child.OrgCode, 2) = '::' THEN '::' ELSE '' END  + h_child.OrgCode + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, LEVEL + 1 AS LEVEL
              FROM L_OrgCode h_child
              inner join orgCode_hierarchy ho on h_child.ParentOrgCodeID = ho.OrgCodeID
        )     
    
        -- CTE:
    INSERT INTO #OrgCodesHier (ParentOrgCodeID,OrgCodeID,OrgCode,OrgName,OrgCode_Level)
        SELECT DISTINCT ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, LEVEL
        FROM orgCode_hierarchy
        WHERE OrgCode LIKE '2.2.1.1%'  
        -- ORDER BY 1  
        ORDER BY OrgCode, 1 
    
    
        SELECT * FROM #OrgCodesHier
    

    【讨论】:

    • 感谢您的回复!我尝试按照您上面建议的示例重新排列,但是它使我的所有列引用无效。试图确定原因,但到目前为止还没有快乐。
    • 插入的顺序需要改变 - 我只是使用你给的顺序
    • 我已编辑,但您缺少一列“OrgCodeSortOrder”
    • 只是一个快速更新 - 仍在解决问题。我尝试以正确的顺序排列列并添加了 OrgCodeSortOrder,但没有任何乐趣。 Ut 首先在WITH 语句上中断('orgCode_hierarchy' 附近的语法不正确。期待'('。)然后紧接着在WITH 中,ParentOrgCodeID 正在寻找'('或SELECT。其他一切除了递归部分中的SELECT 语句外,这些问题或“无效的对象名称”已被破坏-该部分中的一切都很好,直到cast (ho.NegCodeSortOrder
    • 我会继续做不同的事情,这样我就可以提出更聪明的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多