您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

游标vs. While循环-SQLServer

游标vs. While循环-SQLServer

已经证明,递归CTE的效果要好于循环来计算运行总计。实际上,这只是一个带有变量运算符的运行总计,因此应该在此处应用性能优势。

创建行为类似于循环的递归CTE的方法如下:

        ;WITH cte AS (
        SELECT equation, number, order FROM table WHERE order = 1
        UNION ALL
        SELECT table.equation, 
            CASE WHEN table.operation = '+' THEN cte.number + table.number
                 WHEN table.operation = '-' THEN cte.number - table.number END AS number, --etc.
table.order FROM table INNER JOIN cte ON table.order = cte.order + 1 AND table.equation = cte.equation
        )
    SELECT equation, number, order 
    FROM cte
    OPTION (MAXRECURSION 1000);

一个SELECT抓住您最左边的号码,而UNION都对它返回的号码执行以下操作。maxrecursion选项将一个方程式的操作数限制为1000。当然,您可以将其设置得更高。

这个答案有些不完整,因为最终的选择查询将返回中间结果。不过,这很容易过滤。

SQLServer 2022/1/1 18:35:18 有363人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶