2011-11-02 26 views
17

Sto tentando di utilizzare una tabella temporanea in una funzione con valori di tabella, ma sembra che non sia possibile. C'è un altro modo in cui posso usare una tabella temporanea in una funzione con valori di tabella?Utilizzare una tabella temporanea in Funzioni con valori di tabella

codice corrente:

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 

risposta

23

È possibile utilizzare un table variable invece.

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

No.

È possibile utilizzare @table_variables però. Anche se da una rapida occhiata forse un recursive CTE potrebbe funzionare per te piuttosto che usare queste tabelle figlio/genitore affatto.

Problemi correlati