我需要在同一个表上显示一个孩子的所有父母 我有桌子如下:
CREATE TABLE [dbo].[GOV_SIDE_Tbl](
[Gov_ID] [int] IDENTITY(1,1) NOT NULL,
[Gov_Name] [nvarchar](max) NULL,
[Gov_Parent_ID] [int] NULL
CONSTRAINT [PK_GOV_SIDE_Tbl] PRIMARY KEY CLUSTERED
(
[Gov_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我如何使用父ID获得完整的政府名称
ie.
Gov_ID Gov_Name Gov_Parent_ID
1 Ministry of Finance 0
2 Finance Dept1 1
所以当我通过Gov_ID = 2时
the returned full name will be:
"Finance Dept1-Ministry of Finance"
答案 0 :(得分:0)
使用基本条件(ParentID = 0)创建递归函数,获取子ID,然后获取与递归调用结果连接的当前ID的名称。
CREATE function dbo.GetPath (@id int)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @name nvarchar(max);
DECLARE @parenID int;
select @name=Name,@parenID=ParentID from [Table] where ID=@id;
if(@parenID=0)
RETURN @name;
RETURN @name +' / '+ dbo.GetPath(@parenID);
END
此解决方案受到32级嵌套调用的约束。