Я использую следующую хранимую процедуру для выбора всех дочерних единиц данного идентификатора единицы. Для each unit only one child
есть и нет дочерних для наименьшей единицы
ALTER PROCEDURE [dbo].[UnitSelectChildByID]
@company_ID INT,
@unit_ID INT
AS
BEGIN
DECLARE @parent INT
SET @parent=@unit_ID
DECLARE @temp TABLE(id int)
WHILE((SELECT COUNT(*) FROM tblUnit WHERE parent_ID=@parent) >0)
BEGIN
INSERT INTO @temp SELECT unit_ID FROM tblUnit WHERE parent_ID=@parent
SET @parent=(SELECT unit_ID FROM tblUnit WHERE parent_ID=@parent)
END
SELECT
unit_ID
,short_Name AS unit
FROM
tblUnit
WHERE
unit_ID IN (SELECT id FROM @temp) OR unit_ID=@unit_ID
END
Это работает правильно. Что я хочу знать, есть ли лучший способ выбора дочерних единиц на avoiding while loop and table variable