2011-11-02 32 views
17

Tôi đang cố sử dụng bảng tạm thời trong hàm có giá trị bảng, nhưng có vẻ như tôi không thể. Có cách nào khác tôi có thể sử dụng một bảng tạm thời trong một chức năng bảng giá trị?Sử dụng bảng tạm thời trong các hàm có giá trị Bảng

HIỆN Mã sản phẩm:

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 

Trả lời

23

Bạn có thể sử dụng một table variable để thay thế.

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

số

Bạn có thể sử dụng @table_variables mặc dù. Mặc dù từ một cái nhìn nhanh chóng có thể là một recursive CTE có thể làm việc cho bạn hơn là sử dụng các bảng con/cha mẹ ở tất cả.

Các vấn đề liên quan