簡體   English   中英

遞歸函數 SQL 不工作並返回空值

[英]Recursive function SQL dosent work and return null value

嘗試從 SQL 構建樹形菜單:

DepID   Name   ParentID  HaveParent
1       dep1     NULL         0
2       dep2     NULL         0
3       dep3      2           1
4       dep4      3           1
5       dep5      4           1



Declare @str nvarchar(MAX);
DECLARE @ID as integer = (select DepartmentID  from tbl_Department  where  ParentID = 2);
IF (@ID > 0)
         BEGIN
              SET @str = '<ul class="navbar-mobile-sub__list list-unstyled js-sub-list">' +  
                         STUFF((SELECT distinct '<li> <a href="OrganizationHierarchy.aspx?ID='
                               + CONVERT(NVARCHAR(max), DepartmentID)
                               +'">'
                               + CONVERT(NVARCHAR(max), DepartmentName) 
                               +'</a>'
                               + dbo.GetDep((select DepartmentID  
                                             from tbl_Department  
                                             where  ParentID= @ID))
                               +'</li>'    
                               from tbl_Department  
                               where  IsHaveParent = 1 AND ParentID = 2 
                               FOR xml path('')), 1 , 1, '') 
                        + '</ul>'
         END
ELSE 
        BEGIN
            SET @str  = '<ul class="navbar-mobile-sub__list list-unstyled js-sub-list">' +  STUFF((SELECT distinct '<li> <a href="OrganizationHierarchy.aspx?ID='+ CONVERT(NVARCHAR(max), DepartmentID)+'">'+ CONVERT(NVARCHAR(max), DepartmentName) +'</a></li>'    from tbl_Department  where  IsHaveParent = 1 AND ParentID = 2 FOR xml path('')), 1 , 1, '') + '</ul>'
        END 

 print  @ID;
print  @str;

但是遞歸函數返回null

正確的

更改功能 dbo.getSubDep (
@ID 作為整數 ) 返回 nvarchar(MAX)

作為

開始

 Declare @str nvarchar(MAX) ;
 DEclare @xxx integer ;
 Declare @DepID  integer ; 

 set @DepID =  (select count(DepartmentID)  from tbl_Department  where ParentID = @ID )

 IF (@DepID > 0)
      BEGIN
            set @xxx = (select DepartmentID from  tbl_Department  where   tbl_Department.ParentID = @ID);
            set  @str = '<ul class="navbar-mobile-sub__list list-unstyled js-sub-list">' + STUFF((SELECT distinct   ' <li> <a href="OrganizationHierarchy.aspx?ID='+ CONVERT(NVARCHAR(max), DepartmentName)+'">'+ CONVERT(NVARCHAR(max), DepartmentName) +'</a>'   from tbl_Department  where   tbl_Department.DepartmentID =@ID FOR xml path('')), 1 , 1, '') +  dbo.getSubDep(@xxx)+'</li>' + '</ul>'
      END
  ELSE 
      BEGIN
            set  @str =  '<ul class="navbar-mobile-sub__list list-unstyled js-sub-list">' + STUFF((SELECT distinct   ' <li> <a href="OrganizationHierarchy.aspx?ID='+  CONVERT(NVARCHAR(max), DepartmentName)+'">'+ CONVERT(NVARCHAR(max), DepartmentName) +'</a>' +'</li>'  from tbl_Department  where   tbl_Department.DepartmentID =@ID FOR xml path('')), 1 , 1, '')  + '</ul>'
      END 

RETURN  @str

END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM