当前位置: 代码迷 >> SQL >> SQL树形构造查询ById
  详细解决方案

SQL树形构造查询ById

热度:88   发布时间:2016-05-05 13:58:00.0
SQL树形结构查询ById
CREATE FUNCTION [dbo].[fn_FindColumnTree] (@columnID INTEGER)RETURNS @FindColumnTree TABLE (    ColumnID int  NOT NULL,    ColumnName varchar(256) NOT NULL,    p_id int  NULL,	p_name varchar(256)  null)ASBEGIN   WITH Col_Recursive(ColumnName, ColumnID, T_C_ColumnID)     AS	(SELECT ColumnName, ColumnID,T_C_ColumnID  FROM T_Column WHERE ColumnID = @columnID	UNION ALL	SELECT p.ColumnName, p.ColumnID, p.T_C_ColumnID	FROM T_Column  P  INNER JOIN	Col_Recursive A ON A.ColumnID = P.T_C_ColumnID 	)-- copy the required columns to the result of the function    INSERT @FindColumnTree   SELECT a.ColumnID,a.ColumnName,a.T_C_ColumnID,b.ColumnName as p_name   FROM Col_Recursive as a left join T_Column as b on a.T_C_ColumnID=b.ColumnID   RETURNEND;

?

?

其中ColumnName 代表栏目名字 ColumnID 栏目 ID T_C_ColumnID 父栏目Id

usage:

?

public List<Node> buildTree(String rootId) {		final String sql=	"select ColumnID, ColumnName ,T_C_ColumnID FROM T_Column where ColumnID in (select ColumnID from dbo.fn_FindColumnTree("+		rootId+		"))";     //sql调用存储过程查询树的语句.		List<Node> result = new ArrayList<Node>();		List tree=	this.hibernateTemplate.executeFind(new HibernateCallback(){			public Object doInHibernate(Session session)			throws HibernateException, SQLException {				return session				.createSQLQuery(sql)				.list();			}		});				for (Iterator iterator = tree.iterator(); iterator.hasNext();) {			Node node = new Node();			Object[] obj = (Object[]) iterator.next();			node.setId(obj[0].toString());			node.setName(obj[1].toString());			node.setPid(obj[2]!=null?obj[2].toString():"0");			node.setUrl("http://www.baidu.com");			if(node.getId().equals(rootId)){				node.setPid("0");			}			result.add(node);		}		return result;	}

?

?