Sql 如何避免在此处使用while循环?

Sql 如何避免在此处使用while循环?,sql,loops,stored-procedures,while-loop,Sql,Loops,Stored Procedures,While Loop,作为一个从未从SQL任何人那里得到指导的人,我想听听你们是如何进行下面的查询的。据我所知,像这样的循环是一种非常糟糕的方式 我正在通过以下方式在查询中创建表: DECLARE @maxReleases int SET @maxReleases = 100000 DECLARE @RootReleases table (ReleaseId int, RootReleaseId int) DECLARE @ctr int Set @ctr = 1 WHILE(@ctr <= @maxRe

作为一个从未从SQL任何人那里得到指导的人,我想听听你们是如何进行下面的查询的。据我所知,像这样的循环是一种非常糟糕的方式

我正在通过以下方式在查询中创建表:

DECLARE @maxReleases int
SET @maxReleases = 100000

DECLARE @RootReleases table (ReleaseId int, RootReleaseId int)

DECLARE @ctr int
Set @ctr = 1

WHILE(@ctr <= @maxReleases)
BEGIN
WITH cte_Releases
( 
  ReleaseId,
  Name, 
  ParentReleaseID

) 
AS( 
  SELECT  
   ReleaseId, 
   Name,
   ParentReleaseID

  FROM Releases
  Where ReleaseId = @ctr

 UNION ALL 

 SELECT  
  R.ReleaseId,
  R.Name,
  R.ParentReleaseID 
 FROM Releases R
 INNER JOIN cte_Releases ON cte_Releases.ParentReleaseID = R.ReleaseId
) 
INSERT INTO @RootReleases 
SELECT max(ReleaseId) as ReleaseId, min(ReleaseId) as RootReleaseId FROM cte_Releases

SET @ctr = @ctr + 1
END
DECLARE@maxReleases int
设置@maxReleases=100000
声明@RootReleases表(ReleaseId int,RootReleaseId int)
声明@ctr int
设置@ctr=1

而(@ctr我没有数据要测试,所以请告诉我,如果沿着这些线运行某个程序,会发生什么情况。 应该可以使用分组和聚合。 如果您提供样本数据,我可能会提供更多帮助

     DECLARE @RootReleases table (ReleaseId int, RootReleaseId int)

;  WITH cte_Releases
( 
  ReleaseId,
  Name, 
  ParentReleaseID

) 
AS( 
  SELECT  
   ReleaseId, 
   Name,
   ParentReleaseID

  FROM Releases
 -- Where ReleaseId = @ctr

 UNION ALL 

 SELECT  
  R.ReleaseId,
  R.Name,
  R.ParentReleaseID 
 FROM Releases R
 INNER JOIN cte_Releases ON cte_Releases.ParentReleaseID = R.ReleaseId
) 
INSERT INTO @RootReleases 
SELECT max(ReleaseId) as ReleaseId, min(ReleaseId) as RootReleaseId FROM cte_Releases
WHERE ReleaseId BETWEEN 1 AND 100000
GROUP BY ReleaseId