Sql server 在SQL Server 2012中读取XML
我需要使用以下代码读取节点Sql server 在SQL Server 2012中读取XML,sql-server,xml,sql-server-2008,tsql,sql-server-2012,Sql Server,Xml,Sql Server 2008,Tsql,Sql Server 2012,我需要使用以下代码读取节点的值: DECLARE @XML AS XML SET @XML =' <ListChk > <IdChk>26</IdChk> <IdChk>29</IdChk> <IdChk>35</IdChk> <obs>test</obs> <Fol>10944</Fol> </ListCh
的值:
DECLARE @XML AS XML
SET @XML ='
<ListChk >
<IdChk>26</IdChk>
<IdChk>29</IdChk>
<IdChk>35</IdChk>
<obs>test</obs>
<Fol>10944</Fol>
</ListChk>'
SELECT Y.V.value('IdChk[1]','int') AS chk
FROM @XML.nodes('/ListChk') X(V)
CROSS APPLY X.V.nodes('IdChk') Y(V)
将@XML声明为XML
SET@XML=
26
29
35
测试
10944
'
选择Y.V.value('IdChk[1],'int')作为chk
来自@XML.nodes('/ListChk')X(V)
交叉应用X.V.nodes('IdChk')Y(V)
但此查询返回的值为null
有什么问题吗?您的XQuery已经选择了
节点-您不需要(也不能)使用.value('IdChk[1],'int')
来尝试获取该值
相反,您只需读取这些节点的值,如下所示:
SELECT
Y.V.value('.', 'int') AS chk
FROM
@XML.nodes('/ListChk') X(V)
CROSS APPLY
X.V.nodes('IdChk') Y(V)
您的XQuery已经选择了
节点-您不需要(也不能)使用.value('IdChk[1],'int')
尝试获取该值
相反,您只需读取这些节点的值,如下所示:
SELECT
Y.V.value('.', 'int') AS chk
FROM
@XML.nodes('/ListChk') X(V)
CROSS APPLY
X.V.nodes('IdChk') Y(V)
除非您在根元素上实际使用了某些内容,否则您可以像这样缩短查询
SELECT Y.V.value('.','int') AS chk
FROM @XML.nodes('/ListChk/IdChk') Y(V)
。。。(即使这样,您也可以使用xpath导航到具有.value
SELECT
Y.V.value('.','int') AS chk
,Y.V.value('../obs[1]','varchar(4)') AS obs
,Y.V.value('../Fol[1]','int') AS Fol
FROM @XML.nodes('/ListChk/IdChk') Y(V)
chk obs Fol
26 test 10944
29 test 10944
35 test 10944
除非您在根元素上实际使用了某些内容,否则您可以像这样缩短查询
SELECT Y.V.value('.','int') AS chk
FROM @XML.nodes('/ListChk/IdChk') Y(V)
…(即使这样,您也可以使用xpath导航到具有.value
SELECT
Y.V.value('.','int') AS chk
,Y.V.value('../obs[1]','varchar(4)') AS obs
,Y.V.value('../Fol[1]','int') AS Fol
FROM @XML.nodes('/ListChk/IdChk') Y(V)
chk obs Fol
26 test 10944
29 test 10944
35 test 10944
感谢您抽出时间回答我的问题!感谢您抽出时间回答我的问题!