2011-11-02 30 views
17

Tablo değerli bir işlevde geçici tabloyu kullanmaya çalışıyorum ama göremiyorum. Tablo değerli bir işlevde geçici tabloyu kullanmanın başka bir yolu var mı?Tablo değerli işlevlerde geçici tablo kullanma

AKIM KODU:

CREATE FUNCTION dbo.fnt_AllChildren (#ParentName VARCHAR(255)) 
    RETURNS @return_variable TABLE 
    (
     Id INT, 
     Name VARCHAR(255), 
     ParentId INT, 
     ParentName VARCHAR(255) 
    ) 
AS 
BEGIN 
    CREATE TABLE #Child (Id INT, Name VARCHAR(255), ParentId INT, ParentName VARCHAR(255)) 
    CREATE TABLE #Parent (Id INT, Name VARCHAR(255), ParentId INT, ParentName VARCHAR(255)) 


    INSERT #Child (Id, Name, ParentId, ParentName) 
    SELECT child.Id, child.Name, child.ParentId, parent.Name 
    FROM dbo.t_mytable child 
    INNER JOIN dbo.t_mytable parent ON child.ParentId = parent.Id 
    WHERE parent.Name = #ParentName 

    WHILE (@@ROWCOUNT > 0) 
    BEGIN 
     INSERT INTO @return_variable 
     SELECT * FROM #Child 

     DELETE FROM#Parent 

     INSERT INTO #Parent 
     SELECT * FROM #Child 

     DELETE FROM #Child 

     INSERT INTO #Child (Id, Name, ParentId, ParentName) 
     SELECT child.Id, child.Name, child.ParentId, parent.Name 
     FROM dbo.t_mytable child 
     INNER JOIN #Parent parent ON child.ParentId = parent.Id 
    END 
    RETURN 
END 
GO 

cevap

23

Bunun yerine table variable kullanabilirsiniz.

DECLARE @Child TABLE (Id INT, Name VARCHAR(255), ParentId INT, ParentName VARCHAR(255)) 
DECLARE @Parent TABLE (Id INT, Name VARCHAR(255), ParentId INT, ParentName VARCHAR(255)) 
4

Gerçi @table_variables kullanabilirsiniz

sayılı. Bu çocuk/ebeveyn tablolarını kullanmak yerine, hızlı bir bakış açısından belki de recursive CTE sizin için işe yarayabilir.

İlgili konular