これは私が作成したテーブルといくつかの初期値です。
/*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 (A の部下である D の部下) を出力として取得する必要があります。しかし、C と D の 1 つのレベルまでしか取得できません。階層内の任意の数のレベルで機能させるにはどうすればよいですか? 私はそれを間違って見ていますか?
1つのレベルでそれを行うために私が書いた手順は次のとおりです。
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
最初のレベルの結果を一時テーブルにプッシュして再帰を使用することを考えていましたが、列のエントリを 1 つずつ実行する手順がわかりません。何か案は?SQL Server Management Studio 2012 を使用しています。