在表值函数中使用临时表
Posted
技术标签:
【中文标题】在表值函数中使用临时表【英文标题】:Use a temp table in a Table-valued Functions 【发布时间】:2011-12-20 07:35:24 【问题描述】:我正在尝试,但似乎我不能。有没有其他方法可以?
当前代码:
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
【问题讨论】:
【参考方案1】:没有。
你可以使用@table_variables
。尽管乍一看,recursive CTE 可能对您有用,而不是使用这些子/父表。
【讨论】:
【参考方案2】:您可以改用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 表表达式 - 视图,临时表,表变量,派生表,表值函数,公用表表达式(CTE)