首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带外部列的exec sp_xml_preparedocument

带外部列的exec sp_xml_preparedocument
EN

Stack Overflow用户
提问于 2011-08-20 16:22:01
回答 1查看 407关注 0票数 1

我有一张桌子

代码语言:javascript
复制
declare  @temp_xml table
(
    question_id int,
    question_xml xml
)

insert into @temp_xml(question_id, question_xml)
values(51, '<qst qodm="Horizontal" oprm="New Line" oph="25" opw="200" stext=""   filepath="" peqid="-1" peaid="-1" pipeqtype="1" rad="False"><cps><qvs qvid="V1" qvt="Required" qvem="Please choose at least one answer." /><qvs qvid="V15" qvt="UK Phone Number " qvem="Is not a correct phone format." /></cps><branch><![CDATA[]]></branch></qst>'
      ),
      (52,
   '<qst qodm="Horizontal" oprm="New Line" oph="25" opw="200" stext="" filepath="" peqid="-1" peaid="-1" pipeqtype="1" rad="False"><cps><qvs qvid="V1" qvt="Required" qvem="Please choose at least one answer." /><qvs qvid="V5" qvt="US/Canada  Phone Number " qvem="Is not a correct phone format." /></cps><branch><![CDATA[]]></branch></qst>'
      )

select * from @temp_xml

现在我想这样展示。

代码语言:javascript
复制
   Question_id  qvt                       qvem
   51,          Required,                 Please choose at least one answer.
   51,          UK Phone Number,          Is not a correct phone format.
   52,          Required,                 Please choose at least one answer.
   52,          US/Canada  Phone Number,  Is not a correct phone format.

有谁能帮我吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-20 16:35:39

在SQL Server2005和更高版本中,我会完全避免使用旧的openxml API,而使用新的XQuery样式。

在您的示例中,这将类似于:

代码语言:javascript
复制
DECLARE @Temp_XML TABLE (question_id int, question_xml xml)

insert into @Temp_XML(question_id, question_xml)
values(51, 
'<qst qodm="Horizontal" oprm="New Line" oph="25" opw="200" stext="" filepath="" peqid="-1" peaid="-1" pipeqtype="1" rad="False">
    <cps>
        <qvs qvid="V1" qvt="Required" qvem="Please choose at least one answer." />
        <qvs qvid="V15" qvt="UK Phone Number " qvem="Is not a correct phone format." />
    </cps>
    <branch><![CDATA[]]></branch>
</qst>'),
      (52,
'<qst qodm="Horizontal" oprm="New Line" oph="25" opw="200" stext="" filepath="" peqid="-1" peaid="-1" pipeqtype="1" rad="False">
    <cps>
        <qvs qvid="V1" qvt="Required" qvem="Please choose at least one answer." />
        <qvs qvid="V5" qvt="US/Canada  Phone Number " qvem="Is not a correct phone format." />
    </cps>
    <branch><![CDATA[]]></branch>
</qst>')

SELECT
    question_id,
    CPS.QVS.value('(@qvid)[1]', 'varchar(50)') AS 'QVID',
    CPS.QVS.value('(@qvt)[1]', 'varchar(50)') AS 'QuestionValidationType',
    CPS.QVS.value('(@qvem)[1]', 'varchar(50)') AS 'QuestionValidationMessage'
FROM  
    @Temp_xml
CROSS APPLY
    question_xml.nodes('/qst/cps/qvs') AS CPS(QVS)

这将产生如下输出(我包含了"QVID“列,只是为了显示实际选择的内容):

代码语言:javascript
复制
question_id QVID  QuestionValidationType     QuestionValidationMessage
51           V1     Required                 Please choose at least one answer.
51           V15    UK Phone Number          Is not a correct phone format.
52           V1     Required                 Please choose at least one answer.
52           V5     US/Canada Phone Number   Is not a correct phone format.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7130653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档