SQL XML分析器错误:非法名称字符

时间:2013-10-14 09:48:21

标签: sql xml

我正在尝试执行以下查询:

SELECT CASE CAST(a.AnswerText as XML).value('(/AnswerData/Input[@Name = "AnswerData0"]/Value)[1]', 'varchar(100)')
WHEN 'Other' THEN 'Self'
WHEN 'man' THEN 'Manager'
WHEN 'sub' THEN 'Suborbinate'
WHEN 'Colleague' THEN 'Colleague'
ELSE (CAST(a.AnswerText as XML).value('(/AnswerData/Input[@Name = "AnswerData0"]/Value)[1]', 'nvarchar(100)'))
END as RelationShip, ta.TestAssignmentId

这只是一个更大的查询的片段,但这是导致错误的地方。 输出的错误是:

XML parsing: line 1, character 67, illegal name character

我意识到这是XML的一个问题,所以我检查了XML,对我来说似乎没问题:

<AnswerData><Input Name="AnswerData0" Correct="false"><Value>Other</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="true"><Value>sub</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="false"><Value>Colleague</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="true"><Value>sub</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="false"><Value>Colleague</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="false"><Value>man</Value></Input></AnswerData>
<AnswerData><Input Name="AnswerData0" Correct="false"><Value>Colleague</Value></Input></AnswerData>

任何人都可以提供洞察力或注意到我错过的XML内容。

1 个答案:

答案 0 :(得分:2)

事实证明,我收到错误的原因是a.AnswerTest事实上正在返回NULL,这意味着它无法转换为XML。

为了确保a.AnswerText没有返回NULL,我添加了一个额外的WHERE条款来消除这种情况。