--首先创建这样的自定义函数
create function f_getchildid(@id int)
returns @re table(id int)
as
begin
insert into @re values(@id)
while @@rowcount>0
insert into @re select a.id 
from 表 a inner join @re b on a.parentid=b.id
where a.id not in(select id from @re)
return
end
go

解决方案 »

  1.   

    --调用这个自定义函数实现你的查询
    select a.* from 表 a join dbo.f_getchildid(1) on a.id=b.id
      

  2.   

    CREATE FUNCTION dbo.getstr(@id int)
    RETURNS varchar(100)
    AS
    BEGIN
        DECLARE @pid int, @str varchar(100)
        SELECT @str = name, @pid = parentID FROM TAB1 WHERE ID = @id
        RETURN CASE WHEN @pid = 0 THEN @str ELSE dbo.getParent(@pid) + @str END
    END
    GOSELECT dbo.getstr(4)
    SELECT dbo.getstr(5)
    GO
      

  3.   

    修正CREATE FUNCTION dbo.getstr(@id int)
    RETURNS varchar(100)
    AS
    BEGIN
        DECLARE @pid int, @str varchar(100)
        SELECT @str = name, @pid = parentID FROM TAB1 WHERE ID = @id
        RETURN CASE WHEN @pid = 0 THEN @str ELSE dbo.getstr(@pid) + @str END
    END
    GO