加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:38:19 所属栏目:MsSql教程 来源:网络整理
导读:我有一个SQL表名类别.这是结构. slno Category Uppercategory1 Mouse Computer2 Computer Electronics3 Electronics END4 END - 这里鼠标在uppercategory计算机,然后是uppercategory Electronics中的计算机和电子设备是最后一个uppercategory,因为具有upperca
我有一个SQL表名类别.这是结构.
slno      Category            Uppercategory

1           Mouse              Computer

2          Computer            Electronics

3          Electronics           END

4           END                    -

这里鼠标在uppercategory计算机,然后是uppercategory Electronics中的计算机和电子设备是最后一个uppercategory,因为具有uppercategory上层类别的电子设备需要得到上层类别为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

解决方法

您还可以使用递归查询来实现此目的.
;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

你也可以使用

SELECT TOP 1 *
FROM   R
WHERE Uppercategory  = 'End'
ORDER  BY Level

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读