如何使用存储过程使用while选择一个值

Aru*_*run 8 sql stored-procedures

我有一个SQL表名类别.这是结构.

slno      Category            Uppercategory

1           Mouse              Computer

2          Computer            Electronics

3          Electronics           END

4           END                    -
Run Code Online (Sandbox Code Playgroud)

这里的鼠标位于上层类别计算机中,然后是上层类别Electronics中的计算机和电子设备是最后一个上层类别,因为具有上层类别ENd.I的电子设备需要获得上层类别为END的最后一类(电子设备).我尝试了一些代码,但没有得到结果.我的代码.

USE [Database1]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[kt_category]
       @Dcat AS NVARCHAR(250)
AS
DECLARE @tmp TABLE (cater NVARCHAR(255))

BEGIN 

INSERT INTO @tmp 
SELECT UPPERCATEGORY FROM CATEGORY where CATEGORY=@Dcat

while( SELECT UPPERCATEGORY FROM CATEGORY )= 'END'
RETURN
END
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 3

您还可以使用递归查询来实现此目的。

;WITH R
     AS (SELECT *,
                1 AS Level
         FROM   CATEGORY
         WHERE  Category = @Dcat
         UNION ALL
         SELECT C.*,
                R.Level + 1
         FROM   CATEGORY C
                JOIN R
                  ON R.Uppercategory = C.Category)
SELECT TOP 1 *
FROM   R
ORDER  BY Level DESC 
Run Code Online (Sandbox Code Playgroud)

你也可以使用

SELECT TOP 1 *
FROM   R
WHERE Uppercategory  = 'End'
ORDER  BY Level
Run Code Online (Sandbox Code Playgroud)

作为最终查询。这与您问题中的代码具有更接近的语义。