我有一个返回XML的存储过程。 这是一个调查应用程序。
它遍历调查的所有问题和选择,并返回XML。
但是,每当我尝试在XML中包含问题文本时,我都会收到非法的xml字符错误。
我正在查看所有问题,并且没有特殊字符,事实上唯一没有字母字符的是句子结尾处的句号。
我做错了吗?
这是我的问题:
SET @root = (SELECT
CONVERT
(xml,
(
SELECT q.QuestionId '@questionId'
,q.DisplayOrder '@orderId'
,q.IsRequired '@required'
,q.Weight '@weight'
,CONVERT(xml,
(
SELECT
qc.QuestionId '@questionId'
,qc.DisplayOrder '@orderId'
,(SELECT REPLACE((SELECT REPLACE((SELECT REPLACE((SELECT REPLACE((SELECT REPLACE(qc.[Description] ,'&','&')),'''',''')),'"','"')),'<','<')),'>','>'))
FROM survey.Question qc
WHERE qc.QuestionId = q.QuestionId
FOR XML PATH ('question')
)
)
,CONVERT(xml,
(
SELECT
qc.QuestionChoiceId '@choiceId'
,qc.DisplayOrder '@orderId'
,qc.Weight '@weight'
,ISNULL(qc.Description,'') '@description'
FROM survey.QuestionChoice qc
WHERE qc.QuestionId = q.QuestionId
FOR XML PATH ('choice'), type, root('choices')
)
)
FROM survey.Question q
WHERE q.SectionId = @SectionId
FOR XML PATH('questionset')
)
))
如果我替换我的“清理”选择语句,并用硬编码文本替换,我的查询工作正常。
以下是数据库中的一些示例问题。
感谢任何其他意见或建议:
优等生 很有礼貌和专业。
优等生提供了很好的理由 他们的评估。
答案 0 :(得分:0)
您需要将 TYPE 指令指定为以下脚本。
FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
答案 1 :(得分:-1)
那些(SELECT REPLACE((SELECT REPLACE((...不需要语句。只需使用嵌套的REPLACE函数,如:
(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(qc.[Description] ,'&','&')),'''',''')),'"','"')),'<','<')),'>','>'))
或括号少:
(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([FileName] ,'&','&'),'''','''),'"','"'),'<','<'),'>','>'))