【SQL精彩语句】SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)

    技术2022-05-19  20

    /*标题:SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 时间:2010-02-02地点:新疆乌鲁木齐*/create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10))insert into tb values('001' , null  , N'广东省')insert into tb values('002' , '001' , N'广州市')insert into tb values('003' , '001' , N'深圳市')insert into tb values('004' , '002' , N'天河区')insert into tb values('005' , '003' , N'罗湖区')insert into tb values('006' , '003' , N'福田区')insert into tb values('007' , '003' , N'宝安区')insert into tb values('008' , '007' , N'西乡镇')insert into tb values('009' , '007' , N'龙华镇')insert into tb values('010' , '007' , N'松岗镇')goDECLARE @ID VARCHAR(3)--查询ID = '001'的所有子节点SET @ID = '001';WITH T ASSELECT ID , PID , NAME   FROM TB  WHERE ID = @ID  UNION ALL  SELECT A.ID , A.PID , A.NAME   FROM TB AS A JOIN T AS B ON A.PID = B.ID)SELECT * FROM T ORDER BY ID/*ID   PID  NAME---- ---- ----------001  NULL 广东省002  001  广州市003  001  深圳市004  002  天河区005  003  罗湖区006  003  福田区007  003  宝安区008  007  西乡镇009  007  龙华镇010  007  松岗镇(10 行受影响)*/--查询ID = '002'的所有子节点SET @ID = '002';WITH T ASSELECT ID , PID , NAME   FROM TB  WHERE ID = @ID  UNION ALL  SELECT A.ID , A.PID , A.NAME   FROM TB AS A JOIN T AS B ON A.PID = B.ID)SELECT * FROM T ORDER BY ID/*ID   PID  NAME---- ---- ----------002  001  广州市004  002  天河区(2 行受影响)*/--查询ID = '003'的所有子节点SET @ID = '003';WITH T ASSELECT ID , PID , NAME   FROM TB  WHERE ID = @ID  UNION ALL  SELECT A.ID , A.PID , A.NAME   FROM TB AS A JOIN T AS B ON A.PID = B.ID)SELECT * FROM T ORDER BY ID/*ID   PID  NAME---- ---- ----------003  001  深圳市005  003  罗湖区006  003  福田区007  003  宝安区008  007  西乡镇009  007  龙华镇010  007  松岗镇(7 行受影响)*/drop table tb--注:除ID值不一样外,三个SQL语句是一样的。


    最新回复(0)