XML sql查询,属性为列

XML sql查询,属性为列,sql,xml,sql-server-2008,Sql,Xml,Sql Server 2008,我需要查询服务器中可用的xml数据 <root> <Parameter> <Param>APP_REG_NUMBER</Param> <Value>AL/T/2010/86</Value> </Parameter> <Parameter> <Param>SUBLINEID</Param> <Value>2359

我需要查询服务器中可用的xml数据

<root>
  <Parameter>
     <Param>APP_REG_NUMBER</Param>
     <Value>AL/T/2010/86</Value>
  </Parameter>
  <Parameter>
      <Param>SUBLINEID</Param>
      <Value>235931</Value>
  </Parameter>
</root>

请执行必要的操作

您可以使用XQuery来实现这一点,但要意识到您正在用XML重新创建键值对,这就否定了以任何合理方式使用模式或XQuery/XPATH的能力。考虑将格式更改为:

<root>
    <APP_REG_NUMBER>AL/T/2010/86</APP_REG_NUMBER>
    <SUBLINEID>235931</SUBLINEID>
</root>

AL/T/2010/86
235931
我离题了。。。您需要的查询是:

DECLARE @testXml xml = N'<root>
  <Parameter><Param>APP_REG_NUMBER</Param><Value>AL/T/2010/86</Value></Parameter>
  <Parameter><Param>SUBLINEID</Param><Value>235931</Value></Parameter>
</root>'

SELECT 
    @testXml.value('(//Parameter[Param/text()="APP_REG_NUMBER"]/Value)[1]', 'nvarchar(50)') as APP_REG_NUMBER,
    @testXml.value('(//Parameter[Param/text()="SUBLINEID"]/Value)[1]', 'nvarchar(50)') as SUBLINEID
DECLARE@testXml=N'
APP_注册号/T/2010/86
子线235931
'
挑选
@testXml.value('(//参数[Param/text()=“APP_REG_NUMBER”]/value)[1],“nvarchar(50)”作为APP_REG_NUMBER,
@testXml.value(‘(//参数[Param/text()=“SUBLINEID”]/value)[1],'nvarchar(50)’)作为SUBLINEID
您可以使用
//Parameter
语法查找所有
Parameter
元素,然后将它们(
[Param/text()=“foobar”]
)过滤到只有子元素名为
Value
且内部文本为
SUBLINEID
的元素。从那里,您导航到
/Value
子元素并返回第一个结果(
(查询)[1]

DECLARE @testXml xml = N'<root>
  <Parameter><Param>APP_REG_NUMBER</Param><Value>AL/T/2010/86</Value></Parameter>
  <Parameter><Param>SUBLINEID</Param><Value>235931</Value></Parameter>
</root>'

SELECT 
    @testXml.value('(//Parameter[Param/text()="APP_REG_NUMBER"]/Value)[1]', 'nvarchar(50)') as APP_REG_NUMBER,
    @testXml.value('(//Parameter[Param/text()="SUBLINEID"]/Value)[1]', 'nvarchar(50)') as SUBLINEID