如何处理“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。

2024-01-23

我被要求创建脚本,希望运行它的人提供员工 ID。找到所提供的员工任意深度监督的所有员工。

我的代码是:

CREATE FUNCTION [dbo].[GetNames] (@V uniqueidentifier)  
RETURNS @OldNames TABLE (EMP_NAME varchar(50))
 AS 
BEGIN
    DECLARE @master uniqueidentifier
    SET @master=(SELECT EMP_Supervisor FROM Employee WHERE EMP_ID=@v)
    IF @master=NULL return

    INSERT INTO @OldNames(EMP_NAME)
        SELECT (SELECT EMP_NAME FROM Employee WHERE EMP_ID = @master)
        FROM Employee
        UNION
        SELECT EMP_NAME FROM GetNames(@master)
     RETURN
END

当我想看看它是否有效时,我执行以下命令:

SELECT * from GetNames('561e2d88-a747-460f-99e1-cfb1d3d8ca5c')

where "561e2d88-a747-460f-99e1-cfb1d3d8ca5c" 是员工的用户界面,我将此作为例外:

最大存储过程、函数、触发器或视图嵌套级别 超出(限制 32)。

你能帮我么?提前致谢!!


假设您正在使用 SQL Server

看看下面的例子

DECLARE @EmployeeStructure TABLE(
        ID INT,
        Name VARCHAR(MAX),
        ManagerID INT
)

INSERT INTO @EmployeeStructure SELECT 1, 'a', NULL
INSERT INTO @EmployeeStructure SELECT 2, 'b', 1
INSERT INTO @EmployeeStructure SELECT 3, 'c', 1
INSERT INTO @EmployeeStructure SELECT 4, 'd', 2
INSERT INTO @EmployeeStructure SELECT 5, 'e', 2
INSERT INTO @EmployeeStructure SELECT 6, 'f', 2

DECLARE @EmployeeID INT = 2

;WITH Employee AS (
        SELECT  Name, ID
        FROM    @EmployeeStructure e 
        WHERE   ManagerID = @EmployeeID
        UNION ALL
        SELECT  es.Name,
                es.ID
        FROM    Employee e INNER JOIN
                @EmployeeStructure es   ON  e.ID = es.ManagerID
)
SELECT  Name
FROM    Employee
OPTION (MAXRECURSION 0)

SQL 小提琴演示 http://www.sqlfiddle.com/#!3/d41d8/13533

除此之外也许看看

使用通用表表达式 http://msdn.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx and 使用公用表表达式的递归查询 http://msdn.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx

Also,

查询提示 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms181714.aspx

最大递归数

指定此查询允许的最大递归次数。 number 是 0 到 32767 之间的非负整数。当 0 是 指定,没有限制。如果未指定此选项,则 服务器的默认限制为 100。

当达到 MAXRECURSION 限制的指定或默认数量时 查询执行期间,查询结束并返回错误。

由于此错误,该语句的所有效果都将回滚。 如果语句是 SELECT 语句,则部分结果或无结果 可能会被退回。返回的任何部分结果可能不包括所有行 递归级别超出指定的最大递归级别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。 的相关文章

随机推荐

  • SharpDX、DirectWrite 和 Windows 窗体

    可以使用 DirectWrite 将文本渲染到 WinForm 应用程序中的 PictureBox 中吗 我正在使用 SharpDX 并浏览了 DirectWrite 示例 试图构建最简单的工作案例 我创建了一个表单并只向其中添加了一个图片
  • 根据列值分割大型 csv 文本文件

    我的 CSV 文件有多列已排序 例如 我可能有这样的行 19980102 PLXS 10032 Q A 15 12500 15 00000 15 12500 2 19980105 PLXS 10032 Q A 14 93750 14 750
  • C++ 中单例的线程安全惰性构造

    有没有一种方法可以在 C 中实现单例对象 以线程安全的方式延迟构造 两个线程可能同时是单例的第一个用户 它仍然应该只构造一次 不依赖于预先构造的静态变量 因此在构造静态变量期间单例对象本身可以安全使用 我不太了解我的C 但是在执行任何代码之
  • 使用 maven-compiler-plugin 排除包适用于一个包,但不适用于另一个包

    我的项目具有以下包结构 src com my app school course Course java com my app school course free CourseFree java 我使用Maven来构建项目 在我的pom
  • 使用 Stateful Session Bean 来跟踪用户的会话

    这是我的第一个问题 我希望我做得对 我需要从事 Java EE 项目 因此 在开始之前 我尝试做一些简单的事情 看看是否能做到 我被困住了有状态会话 Bean 这是问题 我怎样才能使用SFSB跟踪用户的会话 我看到的所有例子最终都 放入 S
  • UIBezierPath:roundedRect:byRoundingCorners:cornerRadii:行为怪异

    我正在尝试将按钮的两个角变成圆形 如果我像这样选择 TopLeft 和 BottomLeft let bezierDisableAdsPath UIBezierPath roundedRect disableAdsButton bounds
  • Gitlab Pages:无法验证域所有权

    今天早上 我收到了针对托管在自定义域上的每个 Gitlab 页面的电子邮件 称域验证失败 没关系 因为我认为我一开始就没有验证过它们 Gitlab 很好地实现了这一点 当我转到每个存储库的 设置 gt 页面 gt Domain Detail
  • 一个 SVG 文件,里面有很多 SVG 渐变

    我正在制作一组使用动态渐变的按钮 我已经通过使用 Firefox 3 6 和 WebKit 专有的 CSS 扩展来处理它们 我所需要做的就是使用 background image url gradient svg 支持 Opera iOS
  • phpExcel:无法加载资源:net::ERR_CONNECTION_RESET

    我实际上使用 phpExcel 来获取一个 excel 文件 我用一个命令从用户那里恢复该文件
  • Shiny 未检测到shiny:inputchanged 事件

    如果应用程序能够检测到上次单击或更新的小部件的 ID 那么我为闪亮的应用程序设计所采用的方法将是最简单的 This https stackoverflow com q 72061061 7742981问题的出现解决了问题 然而 当我使用接受
  • 从 Rails3-jquery-autocomplete 自定义列表

    我有一个hotel模型及其属性是 id hotel name address searchable 当我设置可搜索时false对于特定酒店 当我在搜索字段中输入时 该酒店不应出现在下拉列表中 控制器是 class HotelsControl
  • 表情符号字符变灰(HTML / CSS)

    我当前的问题是我正在尝试将带有表情符号的按钮灰显 尽管如此 由于表情符号的性质 似乎无法使用 HTML CSS 属性更改颜色 I e
  • xib 文件的 iPhone 本地化

    我刚刚熟悉 xib 文件的本地化 想知道是否有一种方法可以通过直接引用 plist 来本地化 xib 中的字符串 欣赏一些想法 如果您不想直接本地化 xib 文件 则可以将它们包含的文本提取到 strings 文件中 并且在翻译 strin
  • 如何使用node.js测试文件权限?

    如何检查正在运行的 Node js 进程对给定文件的权限 读 写 执行 我希望fs Stats object http nodejs org docs latest api fs html fs class fs stats有一些有关权限的
  • Django 外键值的精确匹配

    class Sentence Model name CharField class Tokens Model token CharField sentence ForeignKey Sentence related name tokens
  • 如何在 android 中模拟 Kotlin 对象?

    我在 kotlin 中有一个对象控制当前用户的会话信息 我想模拟有回调的登录方法 在测试时 我需要在 SessionController 对象中模拟此方法 object SessionController fun signIn userna
  • Java (J2SE) DTMF 音调检测

    我正在尝试执行以下操作 我正在使用我的 java 应用程序给另一个人打电话 已经完成并且工作正常 然后我正在播放录音 例如 请按 1 一继续英语 已经完成且工作正常 现在我想检测那个人按 1 根据我在 google 搜索中的研究 我发现这可
  • 如何在 Excel 中将 hhmmAM/PM(无空格)格式化为时间 hh:mm AM/PM?

    我正在开发一个薪资项目 为了提高数据输入效率 我希望以 hhmmAM PM 格式输入时间 没有空格或冒号 最好只输入 a p 而不是 AM PM 并将其转换为标准带有冒号和空格的时间格式 谢谢 这是一个为列编码的小宏A 可以对其进行修改以处
  • 增加火花任务大小[重复]

    这个问题在这里已经有答案了 当我在 Spark Shell 中执行代码时遇到问题 Stage 1 gt 0 0 16 17 01 13 06 09 24 WARN TaskSetManager Stage 1 contains a task
  • 如何处理“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。

    我被要求创建脚本 希望运行它的人提供员工 ID 找到所提供的员工任意深度监督的所有员工 我的代码是 CREATE FUNCTION dbo GetNames V uniqueidentifier RETURNS OldNames TABLE