如何使用 Select SQL 在函数内设置变量

How to Set a variable inside a Function with Select SQL

我需要创建一个函数,该函数 returns 来自在特定员工下工作的员工 table。

我尝试编写以下内容,但出现错误:

An INSERT statement cannot contain a SELECT statement that assigns values to a variable.

CREATE FUNCTION GetSubTree (@SupervisorID int)
RETURNS @Result TABLE(
    Id  INT     PRIMARY KEY NOT NULL,
    HIERARCHY   HIERARCHYID    NOT NULL ,
    FirstName   NVARCHAR(50)    NOT NULL,
    LastName   NVARCHAR(50)    NOT NULL,
    NationalCode    bigint    NOT NULL,
    EmployeeRole    NVARCHAR(3) NOT NULL
)
AS
BEGIN
    DECLARE @hi HIERARCHYID;
    DECLARE @hiT TABLE(
        HI HIERARCHYID
    )
    INSERT into @hiT
    SELECT Top 1 @hi= HIERARCHY
    FROM dbo.Company as C1
    WHERE C1.Id = @SupervisorID;
    INSERT INTO @Result
    SELECT * 
    FROM   dbo.Company as C
    WHERE   C.HIERARCHY.IsDescendantOf(@hi) = 1 AND C.Id != @SupervisorId;
    RETURN;
End;

感谢任何帮助

拆分命令

CREATE FUNCTION GetSubTree (@SupervisorID int)
RETURNS @Result TABLE(
    Id  INT     PRIMARY KEY NOT NULL,
    HIERARCHY   HIERARCHYID    NOT NULL ,
    FirstName   NVARCHAR(50)    NOT NULL,
    LastName   NVARCHAR(50)    NOT NULL,
    NationalCode    bigint    NOT NULL,
    EmployeeRole    NVARCHAR(3) NOT NULL
)
AS
BEGIN
    DECLARE @hi HIERARCHYID;
    DECLARE @hiT TABLE(
        HI HIERARCHYID
    )

    SELECT Top 1 @hi= HIERARCHY
    FROM dbo.Company as C1
    WHERE C1.Id = @SupervisorID;

    INSERT into @hiT
    VALUES
    (@hi)
    
    INSERT INTO @Result
    SELECT * 
    FROM   dbo.Company as C
    WHERE   C.HIERARCHY.IsDescendantOf(@hi) = 1 AND C.Id != @SupervisorId;
    RETURN;

End;