2011-11-02 9 views
17

मैं तालिका-मूल्यवान फ़ंक्शन में एक temp तालिका का उपयोग करने का प्रयास कर रहा हूं, लेकिन ऐसा लगता है कि मैं नहीं कर सकता। क्या कोई अन्य तरीका है कि मैं एक टेबल-मूल्यवान फ़ंक्शन में एक temp तालिका का उपयोग कर सकता हूं?तालिका-मूल्यवान कार्यों में एक temp तालिका का उपयोग करें

वर्तमान कोड:

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 

उत्तर

23

आप एक table variable बजाय उपयोग कर सकते हैं।

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

सं

आप @table_variables हालांकि उपयोग कर सकते हैं। हालांकि एक त्वरित नज़र से शायद recursive CTE इन बच्चों/अभिभावक तालिकाओं का उपयोग करने के बजाय आपके लिए काम कर सकता है।

संबंधित मुद्दे