Sql server 2008 选择同一表中所有子级的父级

Sql server 2008 选择同一表中所有子级的父级,sql-server-2008,Sql Server 2008,我需要在同一张表上显示一个子项的所有父项 我的表格如下: 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

我需要在同一张表上显示一个子项的所有父项 我的表格如下:

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"

创建一个递归函数,其基本条件(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级嵌套呼叫的限制。

这里也有答案,我需要成为我的朋友