我正在尝试执行以下查询:
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内容。
答案 0 :(得分:2)
事实证明,我收到错误的原因是a.AnswerTest
事实上正在返回NULL
,这意味着它无法转换为XML。
为了确保a.AnswerText
没有返回NULL
,我添加了一个额外的WHERE
条款来消除这种情况。