数据库运用XML操作

简介:
1. xml index

alter table orders
add constraint pk_orders_orderid
primary key clustered(orderid)

create primary xml index xidx_details on orders(details)

create xml index xidx_details_path on orders(details) using xml index xidx_details for path

create xml index xidx_details_property on orders(details) using xml index xidx_details for property

create xml index xidx_details_value on orders(details) using xml index xidx_details for value


2. Demo XML表达式查询

declare @mydoc xml
set @mydoc = '
<AAA>
<BBB/>
<BBB/>
<CCC>
<DDD/>
<BBB>
<EEE/>
</BBB>
</CCC>
</AAA>
'
select @mydoc.query( ' //BBB ')
select @mydoc.query( ' //BBB[1] ')
select @mydoc.query( ' /AAA/BBB[1] ')
select @mydoc.query( ' /AAA/BBB[last()] ')

declare @mydoc xml
set @mydoc = '
<AAA>
<BBB ID="1"/>
<BBB ID="2"/>
<CCC>
<DDD/>
<BBB ID="3">
<EEE/>
</BBB>
</CCC>
</AAA>
'
select @mydoc.query( ' /AAA/BBB[@ID="1"] ')


select @myDoc.query( ' /bookstore/book/title ')

查询条件可以是attribute, 也可以是element,如下是element示例
select @myDoc.query( ' /bookstore/book[price>30] ')

3. FLOWER

declare @myDoc xml
set @myDoc = '
<AAA>
<BBB ID=" 1" />
<BBB ID="1" />
<BBB NAME="NAME1"/>
<CCC ID="1">
<DDD/>
<BBB>
<EEE ID="1"/>
</BBB>
<BBB/>
</CCC>
</AAA>
'
select @myDoc.query( '
for $id in /AAA/BBB
return $id
')

declare @myDoc xml
set @myDoc = '
<AAA>
<BBB>HELLO</BBB>
<BBB>Welcome</BBB>
<BBB NAME="NAME1"/>
<CCC ID="1">
<DDD/>
<BBB>OK
<EEE ID="1"/>
</BBB>
<BBB/>
</CCC>
</AAA>
'
select @myDoc.query( '
for $id in //BBB
return <result>{data($id)}</result>
')


declare @myDoc xml
set @myDoc = '
<bookstore>
<book category="COOKING">
<title>Everyday</title>
<author>Giade De</author>
<price>30.00</price>
</book>
<book category="COMPUTER">
<title>Windows 2003</title>
<author>Mike</author>
<price>50.00</price>
</book>
<book category="SOFTWARE">
<title>VS.NET2003</title>
<author>Mike</author>
<price>90.00</price>
</book>
</bookstore>
'
select @myDoc.query( ' /bookstore/book/title ')
-- ---------------------------
select @myDoc.query( ' /bookstore/book[price>30] ')


select @myDoc.query( ' for $x in /bookstore/book
where $x/price>30
return $x/title
')

select @myDoc.query( ' for $x in /bookstore/book/title
order by $x
return $x
')

select @myDoc.query( ' for $x in /bookstore/book/title
return <li>{data($x)}</li>
')

select @myDoc.query( ' for $x in /bookstore/book/title
order by $x
return <li>{data($x)}</li>
')

value查询
declare @myDoc xml
set @myDoc = '
<bookstore>
<book category="COOKING" id="1" >
<title>Everyday</title>
<author>Giade De</author>
<price>30.00</price>
</book>
<book category="COMPUTER" id="2" >
<title>Windows 2003</title>
<author>Mike</author>
<price>50.00</price>
</book>
<book category="SOFTWARE" id="3" >
<title>VS.NET2003</title>
<author>Mike</author>
<price>90.00</price>
</book>
</bookstore>
'
select @myDoc.value( ' (/bookstore/book/@id)[1] ', ' int ')

exist查询
select @myDoc.exist( ' /bookstore/book/title="VS.NET2003" ')


select @myDoc.exist( ' /bookstore/book[@id=1] ')

结果集中绑定表中列
select orderid, ' L01 ' as ProductID,Customer,
Details.query( '
<OrderDetails>
<Customer>{sql:column("Customer")}</Customer>
{
for $x in //row
return $x
}
</OrderDetails>
')
from orders

4.修改XML
INSERT
declare @doc xml
set @doc = ' <Products></Products> '

set @doc.modify(
' insert (<Product><ID>L01</ID><Name>LL01</Name></Product>)
into (/Products)[1]
')

set @doc.modify(
' insert (<Product><ID>L02</ID><Name>LL02</Name></Product>)
as first into (/Products)[1]
')

set @doc.modify(
' insert (<Product><ID>L03</ID><Name>LL03</Name></Product>)
as last into (/Products)[1]
')

set @doc.modify(
' insert attribute Price {"20.50"} into (/Products/Product)[1] ')

select @doc
-- ----------------------------------------
DELETE
declare @myDoc xml
set @myDoc = '
<bookstore>
<book category="COOKING" id="1" >
<title>Everyday</title>
<author>Giade De</author>
<price>30.00</price>
</book>
<book category="COMPUTER" id="2" >
<title>Windows 2003</title>
<author>Mike</author>
<price>50.00</price>
</book>
<book category="SOFTWARE" id="3" >
<title>VS.NET2003</title>
<author>Mike</author>
<price>90.00</price>
</book>
</bookstore>
'
set @mydoc.modify( ' delete (/bookstore/book[@id="1"]) ')

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

set @mydoc.modify( ' delete (/bookstore/book[@id="1"])[1] ')

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

set @mydoc.modify( ' delete (/bookstore/book/price)[1] ')
-- --------------------------

set @mydoc.modify( ' delete (/bookstore/book/price/text())[1] ')
-- ---------------------------
REPLACE
update text:

set @mydoc.modify( ' replace value of (/bookstore/book/price/text())[1] with "99.50" ')

update attribute:

set @mydoc.modify( ' replace value of (/bookstore/book/@id)[1] with "10" ')
-- ----------
set @mydoc.modify( '
replace value of (/bookstore/book/@id)[1]
with(
if(/bookstore/book[@id="1"]) then
"10"
else
"100"
)
')



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/10/24/260707.html,如需转载请自行联系原作者
相关文章
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
100 1
|
12月前
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
281 2
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错合集之cdc postgres数据库,当表行记录修改后报错,该如何修改
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
关系型数据库 Java 数据库
实时计算 Flink版操作报错合集之flinksql采PG数据库时报错,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之在处理PostgreSQL数据库遇到报错。该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
230 1
|
Java Devops API
阿里云云效操作报错合集之云效页面提示数据库保存不进去,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。

热门文章

最新文章