这是我创建的表和一些初始值。
/*Make the table*/
CREATE TABLE PEOPLE(
ID int PRIMARY KEY,
NAME varchar(100) NOT NULL,
SUPERIOR_NAME varchar(100)
);
/*Give it some initial values*/
INSERT INTO PEOPLE VALUES(1, 'A',NULL), (2, 'B', 'E'), (3, 'C', 'A'),
(4, 'D', 'A'), (5, 'E',NULL), (6, 'F', 'D');
我需要编写一个 SQL 过程,它将返回一个人的所有下属,包括所有下属等。在这个例子中,如果我输入 A,我应该得到 C、D 和 F(D 的下属,是 A 的下属)作为输出。但是我只能达到一个级别,即 C 和 D。如何使它适用于层次结构中的任意数量的级别?我看错了吗?
这是我为一个级别编写的程序:
USE DB
GO
CREATE PROCEDURE SP_GETSUBS @NAME VARCHAR(100)
AS
BEGIN
IF @NAME IN (SELECT SUPERIOR_NAME FROM PEOPLE)
SELECT SUPERIOR_NAME AS "NAME", NAME AS "SUBORDINATE" FROM PEOPLE WHERE
SUPERIOR_NAME=@NAME;
END
我正在考虑将第一级结果推送到一个临时表中并使用递归,但我不知道制作过程是如何逐个通过列的条目运行的。有任何想法吗?我使用 SQL Server Management Studio 2012。