sql-server-2008 - 在表值函数中使用临时表

标签 sql-server-2008 tsql function temp-tables

我正在尝试在一个表值函数中使用一个临时表,但看来我做不到。我还有其他方法可以在表值函数中使用临时表吗?
当前代码:

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

最佳答案

您可以改用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))

关于sql-server-2008 - 在表值函数中使用临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7980807/

相关文章:

sql - 创建一个以 SQL @tables 作为其成员的 UDT

SQL Server服务启动失败

c# - aws Lambda 函数中的 Webresponse c#

sql - 我正在尝试根据日期和符号通过将两个表的两列相乘来更新另一个表中的多个值

sql-server - 搜索和替换存储过程中的内容

SQL 连接格式 - 嵌套内连接

tsql - 带空格的文件路径的 T-SQL 备份数据库命令?

sql - T-SQL中 '\'和 '$'的用法是什么?

c - 获取用户信息函数

SELECT 子句中的 MySQL 自定义函数非常慢