当前位置:  开发笔记 > 编程语言 > 正文

混淆了这个查询的工作原理

如何解决《混淆了这个查询的工作原理》经验,为你挑选了1个好方法。

我正在尝试学习高级sql以及如何使用系统查询(sql server).以下查询有点令人困惑.

CREATE PROC dbo.ShowHierarchy
(
    @Root int
)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @EmpID int, @EmpName varchar(30)

    SET @EmpName = (SELECT EmpName FROM dbo.Emp WHERE EmpID = @Root)
    PRINT REPLICATE('-', @@NESTLEVEL * 4) + @EmpName

    SET @EmpID = (SELECT MIN(EmpID) FROM dbo.Emp WHERE MgrID = @Root)

    WHILE @EmpID IS NOT NULL
    BEGIN
        EXEC dbo.ShowHierarchy @EmpID
        SET @EmpID = (SELECT MIN(EmpID) FROM dbo.Emp WHERE MgrID = @Root AND EmpID > @EmpID)
    END
END
GO

取自这里:

http://vyaskn.tripod.com/hierarchies_in_sql_server_databases.htm

每次运行查询时,@ EmpId参数如何递增?它会自己做吗?另外,每次递归都会增加@root吗?例如CEO是root,直接下属,直接下属现在是@root等.

谢谢



1> Quassnoi..:

每次运行查询时,@ EmpId参数如何递增?它会自己做吗?

这个:

SET @EmpID = (SELECT MIN(EmpID) FROM dbo.Emp WHERE MgrID = @Root AND EmpID > @EmpID)

选择EmpID大于已选择的最小值,并将其分配给@EmpID.

当然,如果有的话,新的@EmpID将比旧的更大,这意味着@EmpID增加.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有