Использовать временную таблицу в табличных функциях

17

Я пытаюсь использовать временную таблицу в табличной функции, но, похоже, я не могу. Есть ли другой способ, которым я могу использовать временную таблицу в табличной функции?

ТЕКУЩИЙ КОД:

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
    
задан norlando 02.11.2011 в 14:05
источник

2 ответа

23

Вместо этого вы можете использовать переменную таблицы .

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))
    
ответ дан Mikael Eriksson 02.11.2011 в 14:09
источник
4

Нет.

Однако вы можете использовать @table_variables . Хотя с быстрым взглядом возможно, рекурсивный CTE может работать для вас, а не использовать эти дочерние / родительские таблиц вообще.

    
ответ дан Martin Smith 02.11.2011 в 14:10
источник