[英]SQL Server Function to return a value or a NULL if no results
[英]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.