大智

快乐工作中生活

 

SQL Server 自定义函数 返回树结构函数

数据库结构:

image

表内的数据:

image

自定义函数: 递归查出 树下所有节点 ,参数是 父id

 create  function sss(@id as int)
  returns @t table
  (
    id int not null,
    name int not null,
    pid int null
  )
  as
  begin
  declare @lay as int;
  insert into @t 
  select * from tree where pid =@id;
  
  select @lay = min(id) from tree where pid =@id; --第一次 @lay=5
  
  while @lay is not null
  begin
  
    insert into @t 
    select * from sss(@lay);
    
    select @lay=min(id) from tree
    where id>@lay and pid=@id
  end
  return;
  end
  go
  
  
 
.net代码:
 string cons = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();

        using (SqlConnection con=new SqlConnection(cons))
        {
            if (con.State==ConnectionState.Closed)
            {
                con.Open();
                
            }

            string sql = "select * from sss(@id)";
            SqlCommand cmd = new SqlCommand(sql,con);
          
            cmd.CommandType = CommandType.Text;
           

            cmd.Parameters.Add(new SqlParameter("@id", DbType.Int32)).Value = 4;
            cmd.Parameters.Add("@re",DbType.String);
            cmd.Parameters["@re"].Direction = ParameterDirection.ReturnValue;

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                int i = 0;
                Response.Write(dr[0].ToString() + "\t\t\t" +dr[1].ToString() +"\t\t\t"+  dr[2].ToString() + "</br>");
                i++;
                
            }




            con.Close();

 }

实现的效果如下:

image

posted on 2012-11-01 17:29  lgzh  阅读(387)  评论(0编辑  收藏  举报

导航