select <owner>.f_getChild(id) from grp where temp1=1
用户自定义函数需要加所有者前缀,比如dbo.f_getChild(id),你把<owner>改为实际所有者。

解决方案 »

  1.   

    数据集中每条数据都返回一个Table,如果不用游标好像很难实现。
      

  2.   

    子陌老大的这个函数是效率最高的解决方法了,建议你还是不要用游标来做。CREATE FUNCTION dbo.f_getChild(@ID VARCHAR(10)) 
    RETURNS @t TABLE(ID VARCHAR(10),PID VARCHAR(10),LEVEL INT) 
    AS 
    BEGIN 
    DECLARE @i INT
    SET @i = 1 
    INSERT INTO @t SELECT ID,PID,@i FROM grp WHERE ID = @ID 
    WHILE @@rowcount <> 0 
    BEGIN     
    SET @i = @i + 1
    INSERT INTO @t 
    SELECT a.ID,a.PID,@i 
    FROM grp a,@t b 
    WHERE a.PID=b.ID 
    AND b.Level=@i-1 
    END
    RETURN 
    END