且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQL语句对表中父子节点正向和反向取所有节点

更新时间:2022-09-10 14:43:30

SQL语句对表中父子节点正向和反向取所有节点CREATE TABLE [dbo].[temptb](
SQL语句对表中父子节点正向和反向取所有节点[id] [int] IDENTITY(1,1) NOT NULL,
SQL语句对表中父子节点正向和反向取所有节点[pid] [int] NULL,
SQL语句对表中父子节点正向和反向取所有节点[name1] [varchar](20) ,
SQL语句对表中父子节点正向和反向取所有节点[name] [nvarchar](50) ,
SQL语句对表中父子节点正向和反向取所有节点[parentid] [int] NULL,
SQL语句对表中父子节点正向和反向取所有节点CONSTRAINT [PK_temptb] PRIMARY KEY CLUSTERED
SQL语句对表中父子节点正向和反向取所有节点(
SQL语句对表中父子节点正向和反向取所有节点[id] ASC
SQL语句对表中父子节点正向和反向取所有节点)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
SQL语句对表中父子节点正向和反向取所有节点) ON [PRIMARY]
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点GO
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点/**//* 创建函数 根据节点id找出其所有父节点*/
SQL语句对表中父子节点正向和反向取所有节点create function f_pid(@id int)
SQL语句对表中父子节点正向和反向取所有节点returns @re table(id int,level int)
SQL语句对表中父子节点正向和反向取所有节点as
SQL语句对表中父子节点正向和反向取所有节点begin
SQL语句对表中父子节点正向和反向取所有节点declare @l int
SQL语句对表中父子节点正向和反向取所有节点set @l=0
SQL语句对表中父子节点正向和反向取所有节点insert @re select @id,@l
SQL语句对表中父子节点正向和反向取所有节点while @@rowcount>0
SQL语句对表中父子节点正向和反向取所有节点begin
SQL语句对表中父子节点正向和反向取所有节点set @l=@l+1
SQL语句对表中父子节点正向和反向取所有节点insert @re select a.pid,@l
SQL语句对表中父子节点正向和反向取所有节点from temptb a,@re b
SQL语句对表中父子节点正向和反向取所有节点where a.id=b.id
SQL语句对表中父子节点正向和反向取所有节点and b.level=@l-1
SQL语句对表中父子节点正向和反向取所有节点and a.pid<>0
SQL语句对表中父子节点正向和反向取所有节点end
SQL语句对表中父子节点正向和反向取所有节点update @re set level=@l-level
SQL语句对表中父子节点正向和反向取所有节点return
SQL语句对表中父子节点正向和反向取所有节点end
SQL语句对表中父子节点正向和反向取所有节点go
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点/**//* */
SQL语句对表中父子节点正向和反向取所有节点select a.*,b.level
SQL语句对表中父子节点正向和反向取所有节点from temptb a,f_pid(7) b
SQL语句对表中父子节点正向和反向取所有节点where a.id=b.id
SQL语句对表中父子节点正向和反向取所有节点order by b.level
SQL语句对表中父子节点正向和反向取所有节点go
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点/**//* 创建函数 根据节点id 找出所有子节点*/
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点create function c_tree(@initid int)/**//*定义函数c_tree,输入参数为初始节点id*/
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点returns @t table(id int,name varchar(100),parentid int,lev INT,byid int)/**//*定义表t用来存放取出的数据*/
SQL语句对表中父子节点正向和反向取所有节点begin
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点declare @i int/**//*标志递归级别*/
SQL语句对表中父子节点正向和反向取所有节点set @i=1
SQL语句对表中父子节点正向和反向取所有节点insert @t select id,name,parentid,@i ,byid=@initid from temptb where id=@initid
SQL语句对表中父子节点正向和反向取所有节点while @@rowcount<>0
SQL语句对表中父子节点正向和反向取所有节点begin
SQL语句对表中父子节点正向和反向取所有节点set @i=@i+1
SQL语句对表中父子节点正向和反向取所有节点insert @t select a.id,a.name,a.parentid,@i,@initid from temptb as a,@t as b
SQL语句对表中父子节点正向和反向取所有节点where b.id=a.parentid and b.lev=@i-1
SQL语句对表中父子节点正向和反向取所有节点end
SQL语句对表中父子节点正向和反向取所有节点return
SQL语句对表中父子节点正向和反向取所有节点END
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点/**//*在上面的函数中由于表变量使用了两次,性能很差 ,下面的性能要高些*/
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点create function [dbo].[UF_GetOwnerSKUNumber]()
SQL语句对表中父子节点正向和反向取所有节点RETURNS @b table(id int,byid int)
SQL语句对表中父子节点正向和反向取所有节点BEGIN
SQL语句对表中父子节点正向和反向取所有节点DECLARE @t table(id int,lev INT,byid int)
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点declare @i int/**//*标志递归级别*/
SQL语句对表中父子节点正向和反向取所有节点set @i=1
SQL语句对表中父子节点正向和反向取所有节点insert @t select c.id,@i ,c.byid
SQL语句对表中父子节点正向和反向取所有节点from [temptb] c WITH (NOLOCK)
SQL语句对表中父子节点正向和反向取所有节点WHERE [pid]=0 OR [parentid] IS NULL
SQL语句对表中父子节点正向和反向取所有节点OR parentid NOT IN (SELECT id FROM [temptb]WHERE id=c.id)
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点while @@rowcount<>0
SQL语句对表中父子节点正向和反向取所有节点begin
SQL语句对表中父子节点正向和反向取所有节点set @i=@i+1
SQL语句对表中父子节点正向和反向取所有节点insert @b SELECT a.id,b.byid from
SQL语句对表中父子节点正向和反向取所有节点[temptb] as a WITH (NOLOCK) ,@t as b
SQL语句对表中父子节点正向和反向取所有节点where b.id=a.parentid and b.lev=@i-1
SQL语句对表中父子节点正向和反向取所有节点end
SQL语句对表中父子节点正向和反向取所有节点RETURN
SQL语句对表中父子节点正向和反向取所有节点END
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点select * from c_tree( )
SQL语句对表中父子节点正向和反向取所有节点SQL语句对表中父子节点正向和反向取所有节点/**//* 把所有行转换为一个字符串 */
SQL语句对表中父子节点正向和反向取所有节点DECLARE @FileClassName nvarchar(max)
SQL语句对表中父子节点正向和反向取所有节点SET @FileClassName=''
SQL语句对表中父子节点正向和反向取所有节点
SQL语句对表中父子节点正向和反向取所有节点SELECT @FileClassName =+ @FileClassName+CONVERT(varchar(20),id)+',' FROM [temptb] a WHERE pid=0
SQL语句对表中父子节点正向和反向取所有节点SELECT @FileClassName AS a
SQL语句对表中父子节点正向和反向取所有节点



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2008/05/08/1188592.html,如需转载请自行联系原作者