USE [DNF_09] GO /****** Object: UserDefinedFunction [dbo].[Dnff_sys_GetTree] Script Date: 11/07/2011 16:34:10 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO
-- Drop FUNCTION Dnff_sys_GetTree ALTER FUNCTION [dbo].[Dnff_sys_GetTree]( /* delete Dnft_tra_TreeCode insert Dnft_tra_TreeCode(key_seq,link_key_seq,Tree_Name,SortID) select key_seq,link_key_seq,menu_name,SortID from Dnft_sys_Menu select * from dbo.Dnff_sys_GetTree('root',100,' ','') delete Dnft_tra_TreeCode */ @key_seq_P varchar(Max), @iLevel int, @Tree_NameFill_P varchar(Max), @Tree_Code_P varchar(Max) )RETURNS @re TABLE(Tree_Name nvarchar(Max),Tree_Code nvarchar(Max),key_seq varchar(50),SortID int)
AS BEGIN
declare @Tree_Name nvarchar (100) declare @key_seq varchar (50) declare @iLevelIndex int;set @iLevelIndex=0 declare crRoll cursor for select Tree_Name,key_seq from Dnft_tra_TreeCode (nolock) where link_key_seq=@key_seq_P order by SortID asc,up_dtime desc
open crRoll while 1=1 --@i<@count begin fetch next from crRoll into @Tree_Name,@key_seq if @@fetch_status <> 0 break begin declare @Tree_Code varchar(Max); set @Tree_Code=case when @Tree_Code_P='' then '@-'+dbo.Dnff_sql_IntToString(@iLevelIndex+1,4) else @Tree_Code_P+'-'+dbo.Dnff_sql_IntToString(@iLevelIndex+1,4) end -- Add Node insert @re values(@Tree_NameFill_P+@Tree_Name,@Tree_Code ,@key_seq,-1) -- Call MySelf if (select count(*) from Dnft_tra_TreeCode (nolock) where link_key_seq=@key_seq)>0 and @iLevelIndex<@iLevel begin declare @iLevelSub int;set @iLevelSub=@iLevel-1 insert into @re select isnull(@Tree_NameFill_P+Tree_Name,''),Tree_Code ,key_seq,-1 from dbo.Dnff_sys_GetTree(@key_seq,@iLevelSub,@Tree_NameFill_P,@Tree_Code) end set @iLevelIndex=@iLevelIndex+1 end end close crRoll deallocate crRoll
--更新SortID update @re set SortID=convert(int,case when len(isnull(tree_Code,'-1'))<6 then '-1' else right(tree_Code,4) end)
RETURN END