有关“ FOR XML EXPLICIT”故障排除的建议,消息6833“要求首先打开父标记”错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关“ FOR XML EXPLICIT”故障排除的建议,消息6833“要求首先打开父标记”错误相关的知识,希望对你有一定的参考价值。

我继承了一个1000行的存储过程,该过程使用FOR XML EXPLICIT生成XML。我的问题是它在大多数情况下都有效。在某些情况下,我会收到错误:

父标签ID 2不是公开的标签。 FOR XML EXPLICIT需要父级标签要先打开。检查结果集的排序。编号:6833严重程度:16状态:1

我需要有关如何解决此问题的想法。我需要找出嵌套失败的地方。可能是不发出父行而发出子行的情况。更糟糕的是,该问题仅发生在我们的测试系统上,该系统可能缺少一些生产数据。问题是如何从数千行中找到它?

我肯定不存在一个疯狂的想法:SQL Server使用一种算法来确定行的顺序是否正确。如果有一个工具可以查看我的结果集(而不提供FOR XML EXPLICIT),并找出问题所在,然后告诉我,那将是很棒的(如果不太可能)。

在没有这种工具的情况下,我欢迎有关如何调试此工具的任何建议。 XML(有效时)有四个层次!


更新

:谢谢您到目前为止的所有回答。看起来这是一个编辑不良的存储过程的问题。大的部分用“ / * /”注释注释掉了-当代码中已经有“ / * /”注释时效果不佳...我会在确定的情况下再次更新的答案。

我继承了一个1000行的存储过程,该过程使用FOR XML EXPLICIT生成XML。我的问题是它在大多数情况下都有效。在某些情况下,我会收到错误消息:父标记ID 2不是...

答案

一种可能的方法是实际删除FOR XML EXPLICIT部分,并查看由sql语句生成的结果集。它将指示正在生成xml的嵌套,并希望将您定向到该问题。请参见下图,该图取自MSDN文档:http://msdn.microsoft.com/en-us/library/ms189068.aspx

另一答案

使用FOR XML时,结果集的顺序必须在其子级之前具有父xml节点(通常,XML文件不应依赖于顺序;这应使用XSL转换来执行)

另一答案

我将行集(没有FOR XML子句)转储到临时表中。然后,您应该可以在此表中搜索孤儿。

另一答案

我找到了其中一个问题的答案,并想分享一些我学到的教训。

以上是关于有关“ FOR XML EXPLICIT”故障排除的建议,消息6833“要求首先打开父标记”错误的主要内容,如果未能解决你的问题,请参考以下文章

hadoop集群故障排除

JDK 内置实用工具:监视故障排除

Elasticsearch:管理 Elasticsearch 内存并进行故障排除

Elasticsearch:管理 Elasticsearch 内存并进行故障排除

DevOps有关的书

结构化的网络故障检测与排除方法