草庐IT

sql - 声明终止。最大递归 100 在语句完成之前已经用完

coder 2024-06-29 原文

我正在编写一个存储过程来检索菜单控件的 xml 结构。这似乎是一个有效的代码(根据我的说法,这是错误的)但在查询测试器上运行不佳。我怎样才能纠正下面的错误是代码

;WITH Hierarchy AS
(
    SELECT
        MenUid,MenuName,ApplicationId,ParentMenuId, 1 AS 'Level'
    FROM
        dbo.Menu
    WHERE
        ParentMenuId = '-1'

    UNION ALL

    SELECT
        M.MenUid,M.MenuName,M.ApplicationId,M.ParentMenuId, Level + 1 AS 'Level'
    FROM
        dbo.Menu M
    INNER JOIN
        Hierarchy h ON M.ParentMenuId = h.MenuId
)
SELECT *
FROM Hierarchy
ORDER BY [Level],[MenuName]

ParentMenuId 和 MenuId 相关的地方。我得到的某些其他疑问如下

  1. CTE 用于菜单是否完全正确。你还有哪些其他类型的成功
  2. DataSetChildRelations 也适用于此目的(或者我错了)?

请给我更多关于您如何在您的项目中完成菜单系统的想法。

输入

MenuId      MenuName      ApplicationId    ParentMenuId

 1          MenuName1           1              -1

 2          MenuName2           1               1

 3          MenuName3           1               -1

 4          MenuName4           1               2

输出

<Output>
    <Menu>
        <MenuId>1</MenuId>
        <MenuName>MenuName1</MenuName>
        <ApplicationId>1</ApplicationId>
        <ParentMenuId>-1</ParentMenuId>
        <SubMenu>
            <Menu>
                <MenuId>2</MenuId>
                <MenuName>MenuName2</MenuName>
                <ApplicationId>1</ApplicationId>
                <ParentMenuId>1</ParentMenuId>
                <SubMenu>
                    <MenuId>3</MenuId>
                    <MenuName>MenuName4</MenuName>
                    <ApplicationId>1</ApplicationId>
                    <ParentMenuId>3</ParentMenuId>
                </SubMenu>
            </Menu>
        </SubMenu>
    </Menu>
    <Menu>
        <MenuId>4</MenuId>
        <MenuName>MenuName3</MenuName>
        <ApplicationId>1</ApplicationId>
        <ParentMenuId>-1</ParentMenuId>
    </Menu>
</Output>

不要介意我很容易通过 FOR XML PATH 获得的 xml 结构,我一开始并没有让查询运行。

最佳答案

我敢打赌

INNER JOIN
    Hierarchy h ON M.ParentMenuId = h.ParentMenuId

其实应该是

INNER JOIN
    Hierarchy h ON M.ParentMenuId = h.MenuId

编辑

使用此示例数据:

declare @Menu table (
    MenuId int,
    MenuName nvarchar(20),
    ApplicationId int,
    ParentMenuId int
)

insert @Menu values
(1, 'Name1', 1, -1),
(2, 'Name2', 1,  1),
(3, 'Name3', 1, -1),
(4, 'Name4', 1,  2)

和你的查询,经过上面的修改,我得到了

MenUid      MenuName             ApplicationId ParentMenuId Level
----------- -------------------- ------------- ------------ -----------
1           Name1                1             -1           1
3           Name3                1             -1           1
2           Name2                1             1            2
4           Name4                1             2            3

这看起来是正确的。为了帮助您,我们需要查看所有您的相关代码。

关于sql - 声明终止。最大递归 100 在语句完成之前已经用完,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258125/

有关sql - 声明终止。最大递归 100 在语句完成之前已经用完的更多相关文章

  1. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  2. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  3. ruby - 如何在 Ruby 中向现有方法定义添加语句 - 2

    我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca

  4. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  5. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  6. ruby - ruby 乘法语句中星号中断语法前的空格 - 2

    在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl

  7. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  8. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  9. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

  10. ruby-on-rails - 在所有延迟的作业之前 Hook - 2

    是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述

随机推荐