gpt4 book ai didi

sql-server - 使用 XQuery 获取此数据

转载 作者:行者123 更新时间:2023-12-01 23:25:40 25 4
gpt4 key购买 nike

我是 XQuery 的新手,遇到了一些问题。这是我的例子。

我有这个变量:

declare @xmlDoc XML

它存储了以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="Sharedparam" type="xs:string" minOccurs="0" />
<xs:element name="Antoher" type="xs:string" minOccurs="0" />
<xs:element name="RandomParam2" type="xs:string" minOccurs="0" />
<xs:element name="MoreParam" type="xs:string" minOccurs="0" />
<xs:element name="ResultsParam" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Table1>
<Sharedparam>shared</Sharedparam>
<Antoher>sahre</Antoher>
<RandomParam2>Good stuff</RandomParam2>
<MoreParam>and more</MoreParam>
<ResultsParam>2</ResultsParam>
</Table1>
<Table1>
<Sharedparam>Hey</Sharedparam>
<Antoher>what </Antoher>
<RandomParam2>do you</RandomParam2>
<MoreParam>think</MoreParam>
<ResultsParam>2</ResultsParam>
</Table1>
<Table1 />
</NewDataSet>

如何选择 Sharedparam 的所有值? (或者实际上任何返回值(不是 xml)的体面查询都会很棒。)

我真正想要做的是获得这样的结果集:

Name             Value1          Value2          Value3        Value4
Sharedparam shared Hey Null Null
Another share what Null Null
....

这会让我忽略“Value4”以外的任何数据(这对于我使用此数据是可以接受的)。

最佳答案

尝试这样的事情:

SELECT
TBL.SParam.value('(.)[1]', 'varchar(50)')
FROM
@xmldoc.nodes('/NewDataSet/Table1/Sharedparam') AS TBL(SParam)

给我一​​个输出:

(No column name)
shared
Hey

更新:如果您想获取 <Table1> 中的所有 XML 元素及其值元素,您可以使用这个 XQuery:

SELECT
TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 'Attribute',
TBL.SParam.value('(.)[1]', 'varchar(50)') 'Value'
FROM
@xmldoc.nodes('/NewDataSet/Table1/*') AS TBL(SParam)

哪些输出:

Attribute            Value
Sharedparam shared
Antoher sahre
RandomParam2 Good stuff
MoreParam and more
ResultsParam 2
Sharedparam Hey
Antoher what
RandomParam2 do you
MoreParam think
ResultsParam 2

更新 #2: 获取第一个 <Table1> 的值第二个<Table1>一个接一个的 XML 节点,您需要两次调用 .nodes() - 一次检索第一个节点,另一次检索第二个节点。它有点毛茸茸,特别是如果你想进一步扩展它 - 性能会很糟糕 - 但它有效:-)

SELECT
TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 'Attribute',
TBL.SParam.value('(.)[1]', 'varchar(50)') 'Value 1',
TBL2.SParam2.value('(.)[1]', 'varchar(50)') 'Value 2'
FROM
@xmldoc.nodes('/NewDataSet/Table1[1]/*') AS TBL(SParam)
INNER JOIN
@xmldoc.nodes('/NewDataSet/Table1[2]/*') AS TBL2(SParam2) ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)')

输出:

Attribute      Value 1     Value 2
Sharedparam shared Hey
ResultsParam 2 2
RandomParam2 Good stuff do you
Antoher sahre what
MoreParam and more think

关于sql-server - 使用 XQuery 获取此数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com