将一个XML文本显示成行

本文介绍使用SQL Server中的XML数据类型及方法进行数据提取的过程。通过具体案例演示如何利用nodes、query和value等函数来解析XML数据,适用于需要从XML文件中提取结构化数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原帖:http://blog.youkuaiyun.com/htl258/archive/2009/04/01/4040080.aspx

 

DECLARE @doc xml;
SET @doc = ' <biglottos> <N1>1 </N1> <N2>2 </N2> <N3>4 </N3> </biglottos> '


SELECT
    A.x.query(
' N1 ' ).value( ' . ' , ' int ' )N1  ,
    A.x.query(
' N2 ' ).value( ' . ' , ' int ' )N2  ,
    A.x.query(
' N3 ' ).value( ' . ' , ' int ' )N3 
FROM @doc .nodes( ' /biglottos ' ) AS A(x)


/*
N1          N2          N3
----------- ----------- -----------
1           2           4

(1 行受影响)

*/

declare @xml xml
set @xml = '
<Person>
  <Node>
    <Name>admin</Name>
    <Date>2010-4-6</Date>
  </Node>
  <Node>
    <Name>lisi</Name>
    <Date>2010-4-6</Date>
  </Node>
  <Node>
    <Name>wangwu</Name>
    <Date>2010-4-7</Date>
  </Node>
</Person>
'


SELECT
    A.x.query(
' Name ' ).value( ' . ' , ' varchar(10) ' ) Name  ,
    A.x.query(
' Date ' ).value( ' . ' , ' datetime ' ) Date
FROM @xml .nodes( ' //Node ' ) AS A(x)

SELECT

    x . value ( 'Name[1]' , 'varchar(10)' ) Name   ,

    x . value ( 'Date[1]' , 'datetime' ) Date

FROM @xml . nodes ( '//Node' ) AS A ( x )

/*

Name       Date

---------- -----------------------

admin      2010-04-06 00:00:00.000

lisi       2010-04-06 00:00:00.000

wangwu     2010-04-07 00:00:00.000

 

(3 行受影响 )

*/

 

declare @xml xml
set @xml = '
<Person>
  <Node>
    <Name>admin</Name>
    <Date>2010-4-6</Date>
  </Node>
  <Node>
    <Name>lisi</Name>
    <Date>2010-4-6</Date>
  </Node>
  <Node>
    <Name>wangwu</Name>
    <Date>2010-4-7</Date>
  </Node>
</Person>
'


SELECT
    A.x.value(
' (Node/Name)[1] ' , ' varchar(10) ' ) Name1, 
    A.x.value(
' (Node/Name)[2] ' , ' varchar(10) ' ) Name2, 
    A.x.value(
' (Node/Name)[3] ' , ' varchar(10) ' ) Name3 
FROM @xml .nodes( ' Person ' ) AS A(x)

/*
Name1      Name2      Name3
---------- ---------- ----------
admin      lisi       wangwu

(1 行受影响)
*/

 

-------------------------------------------------------------------

想写一个存储过程,将一个XML文本作为参数输入
XML如:
<?xml version="1.0" encoding="utf-8" ?>
<abcs>
<abc QueryName="LatestExchange">
<QueryColumns>
<Columna>FromCurrency </Columna>
<Columna>ToCurrency </Columna>
<Columna>Date </Columna>
<Columna>Value </Columna>
<Columna>OpenPrice </Columna>
<Columna>HighPrice </Columna>
<Columna>LowPrice </Columna>
<Columna>ClosePrice </Columna>
<Columna>Volume </Columna>
<Columna>OpenInterest </Columna>
<Columna>LastUpdate </Columna>
</QueryColumns>
<QueryParameters>
<Parameter Name="Date"> </Parameter>
</QueryParameters>
</abc>
</abcs>

---------------------------------------
问如何查询,才能得到以下结果

Columna
-----------
ToCurrency
Date
Value
OpenPrice
HighPrice
LowPrice
ClosePrice
Volume
OpenInterest
LastUpdate

-->小梁

DECLARE @doc xml;
SET @doc = ' <?xml version="1.0" encoding="utf-8" ?>
<abcs>
  <abc QueryName="LatestExchange">
    <QueryColumns>
      <Columna>FromCurrency </Columna>
      <Columna>ToCurrency </Columna>
      <Columna>Date </Columna>
      <Columna>Value </Columna>
      <Columna>OpenPrice </Columna>
      <Columna>HighPrice </Columna>
      <Columna>LowPrice </Columna>
      <Columna>ClosePrice </Columna>
      <Columna>Volume </Columna>
      <Columna>OpenInterest </Columna>
      <Columna>LastUpdate </Columna>
    </QueryColumns>
    <QueryParameters>
      <Parameter Name="Date" />
    </QueryParameters>
  </abc>
</abcs>
'

SELECT
    A.x.value(
' . ' , ' varchar(20) ' )
FROM @doc .nodes( ' /abcs/abc/QueryColumns/*[position()>1] ' ) AS A(x);

/*
--------------------
ToCurrency
Date
Value
OpenPrice
HighPrice
LowPrice
ClosePrice
Volume
OpenInterest
LastUpdate

(10 行受影响)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值