zoukankan      html  css  js  c++  java
  • SQL Server 实现递归查询

    从SQL Server 2005开始,就可支持通用表表达式(CTE)创建递归查询。下面先创建一个测试表和一些测试数据

    1.创建一个测试表。

    USE [MASTER]
    CREATE TABLE [dbo].[TB_COLUMN_TEST](
        [F_ID] [int] NOT NULL,
        [F_NAME] [nvarchar](20) NOT NULL,
        [F_DESC] [nvarchar](100) NULL,
        [F_PARENTID] [int] NULL
    ) ON [PRIMARY]
    GO

    2.新增一些测试数据,并查看表数据。

    DELETE [TB_COLUMN_TEST]
    INSERT INTO [TB_COLUMN_TEST] VALUES (1,'测试栏目1','测试栏目描述1',NULL)
    INSERT INTO [TB_COLUMN_TEST] VALUES (2,'测试栏目2','测试栏目描述2',NULL)
    INSERT INTO [TB_COLUMN_TEST] VALUES (3,'测试栏目1-1','测试栏目描述1-1',1)
    INSERT INTO [TB_COLUMN_TEST] VALUES (4,'测试栏目1-2','测试栏目描述1-2',1)
    INSERT INTO [TB_COLUMN_TEST] VALUES (5,'测试栏目1-1-1','测试栏目描述1-1-1',3)
    INSERT INTO [TB_COLUMN_TEST] VALUES (6,'测试栏目1-1-2','测试栏目描述1-1-2',3)
    INSERT INTO [TB_COLUMN_TEST] VALUES (7,'测试栏目1-2-1','测试栏目描述1-2-1',4)
    INSERT INTO [TB_COLUMN_TEST] VALUES (8,'测试栏目1-2-2','测试栏目描述1-2-2',4)
    INSERT INTO [TB_COLUMN_TEST] VALUES (9,'测试栏目1-1-1-1','测试栏目描述1-1-1-1',5)
    INSERT INTO [TB_COLUMN_TEST] VALUES (10,'测试栏目1-1-1-2','测试栏目描述1-1-1-2',5)
    SELECT * FROM [TB_COLUMN_TEST]

    3.查询“测试栏目1”下面所有子栏目

    WITH TEMP(F_ID,F_NAME,F_DESC,F_PARENTID)
    AS
    (
        --SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM [TB_COLUMN_TEST] WHERE F_PARENTID=1  --不包括自己
        SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM [TB_COLUMN_TEST] WHERE F_ID=1 --包括自己
        UNION ALL
        SELECT A.F_ID,A.F_NAME,A.F_DESC,A.F_PARENTID FROM [TB_COLUMN_TEST] A
        INNER JOIN TEMP B 
        ON A.F_PARENTID = B.F_ID
    )
    SELECT F_ID,F_NAME,F_DESC,F_PARENTID FROM TEMP

    查询结果:

  • 相关阅读:
    RDLC报表中浮点型设置精度设置小数位位数
    C# 设置DateTime类型的变量值等于Null
    我的2011就这样混掉了
    RDLC报表改动的注意事项之增加字段和参数
    (分享)C# 绘制统计图(柱状图, 折线图, 扇形图)
    C#实现Winform自定义半透明遮罩层
    C#中判断网络连接的状态
    su 和 sudo、su root和su root 区别
    嵌入式系统软件优化方法
    ARM开发步步深入之定时加速
  • 原文地址:https://www.cnblogs.com/tracine0513/p/8547957.html
Copyright © 2011-2022 走看看