我继承了一个 1000 行的存储过程,它使用 FOR XML EXPLICIT 生成 XML。我的问题是它大部分时间都有效。在某些情况下,我收到错误:
Parent tag ID 2 is not among the open tags. FOR XML EXPLICIT requires parent tags to be opened first. Check the ordering of the result set. Number:6833 Severity:16 State:1
我需要有关如何解决此问题的想法。我需要找出嵌套失败的地方。这可能是父行未发出但子行发出的情况。更糟糕的是,这个问题只发生在我们的测试系统上,它可能丢失了一些生产数据。问题是如何从数千行中找到它?
一个我确信不存在的疯狂想法:SQL Server 有一个算法,它用它来确定行的顺序是否正确。如果有一个工具可以查看我的结果集(没有 FOR XML EXPLICIT)并找出问题所在,然后告诉我,那就太好了(如果不太可能)。
在没有这样的工具的情况下,我欢迎任何关于如何调试它的建议。 XML(当它工作时)有四个层次!
更新:感谢您到目前为止的所有回答。看起来这是一个编辑错误的存储过程的问题。大的部分被注释掉了“/* /”注释——当代码中已经有“/ */”注释时,这不能很好地工作……我会在我再次更新时我确定答案。
最佳答案
一种可能的方法是实际删除 FOR XML EXPLICIT 部分并查看由您的 sql 语句生成的结果集。它将指示正在生成 xml 的嵌套,并希望能指导您解决问题。请参阅下图,该图像取自 MSDN 文档,网址为: http://msdn.microsoft.com/en-us/library/ms189068.aspx .
编辑
可能值得发布一个示例输出,但在图像中的示例中,如果 Order!2!Id 对于任何带有 tag=3 的行为 null,您将得到相同的错误。该列实际上是 tag=2 的父行和 tag=3 的子行之间的连接。如果您的数据如上所示,我认为您可以通过识别 parent=2 和 Order!2!Id 为空的行来有效地找到您的问题。
或者它可以是订购。在这种情况下,您可以以某种方式构建一个查询,以识别结果集中 Tag = 2 的行之前出现的任何 Parent = 2 的行。
编辑2
CREATE TABLE MyTable(
Tag int,
Parent int,
SomeIdentifier int
)
INSERT INTO MyTable VALUES (2, 1, 1) -- this row defined before parent
INSERT INTO MyTable VALUES (1, null, 1)
INSERT INTO MyTable VALUES (3, 2, 1)
INSERT INTO MyTable VALUES (3, 2, 1)
INSERT INTO MyTable VALUES (1, null, 2)
INSERT INTO MyTable VALUES (2, 1, 2)
INSERT INTO MyTable VALUES (3, 2, 2)
INSERT INTO MyTable VALUES (3, 2, 2)
INSERT INTO MyTable VALUES (1, null, 3)
INSERT INTO MyTable VALUES (3, 2, 3) -- this is orphaned
INSERT INTO MyTable VALUES (3, 2, 3) -- this is orphaned
;WITH myCte AS(
SELECT Tag
,Parent
,SomeIdentifier
,ROW_NUMBER() OVER (PARTITION BY SomeIdentifier ORDER BY(SELECT 0)) AS RowOrder
FROM MyTable
) SELECT c1.Tag
,c1.Parent
,c1.SomeIdentifier
FROM myCte c1
LEFT OUTER JOIN myCte c2 ON c2.SomeIdentifier = c1.SomeIdentifier AND c1.Parent = c2.Tag
WHERE c1.Parent IS NOT NULL --ignore root rows for now
AND (c1.RowOrder < c2.RowOrder --out of order rows
OR
c2.Tag IS NULL) --orphaned rows
关于sql-server - "FOR XML EXPLICIT"Msg 6833 "requires parent tags to be opened first"Error 故障排除建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466565/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby常量:Content2而不是content2。Aconstantnamestart
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas