Sql server 是否更改此存储过程以避免使用交叉应用?

Sql server 是否更改此存储过程以避免使用交叉应用?,sql-server,stored-procedures,northwind,Sql Server,Stored Procedures,Northwind,我试着在不同的栏中显示老板和负责人的姓名 我可以用cross apply来做,但我被要求不用它来做,但我真的想不出怎么做 我正在使用Northwind SQL Server数据库,以下是我的代码: CREATE PROCEDURE sp_getBossAndEmployeeNames @bossID NCHAR(5) AS CREATE TABLE #TEMP_BOSSES_AND_EMPLOYEES ( BossFullName VARCHAR(35),

我试着在不同的栏中显示老板和负责人的姓名

我可以用cross apply来做,但我被要求不用它来做,但我真的想不出怎么做

我正在使用Northwind SQL Server数据库,以下是我的代码:

CREATE PROCEDURE sp_getBossAndEmployeeNames
    @bossID NCHAR(5)
AS
    CREATE TABLE #TEMP_BOSSES_AND_EMPLOYEES
    (
        BossFullName VARCHAR(35), 
        EmployeeFullName VARCHAR(35)
    )

    INSERT INTO #TEMP_BOSSES_AND_EMPLOYEES
    SELECT (FirstName + ' ' + LastName) as BossFullName, sub.EmployeeFullName 
    FROM Employees 
    CROSS APPLY 
    (
        SELECT (FirstName + ' ' + LastName) as EmployeeFullName FROM Employees WHERE ReportsTo = @bossID 
    ) AS sub
    WHERE EmployeeID = @bossID 

    SELECT * FROM #TEMP_BOSSES_AND_EMPLOYEES

只需使用
内部联接

SELECT B.FirstName + ' ' + B.LastName AS BossFullName
    , E.FirstName + ' ' + E.LastName AS EmployeeFullName
FROM dbo.Employees B
INNER JOIN dbo.Employees E ON E.ReportsTo = B.id
WHERE B.EmployeeID = @bossID;

据我所知,你甚至不需要临时表。

非常感谢,临时表只是为了完成我的任务,但INNER JOIN完成了任务!