Sql Server 对xml类型的操作

 declare @XML XML
SET @XML='<root>
 <OLDVALUE>
  <H_Action id="1130">030</H_Action>
  <D_Action>030</D_Action>
  <OrderCompany>00220</OrderCompany>
  <OrderNumber>10004035</OrderNumber>
  <OrderType>SO</OrderType>
  <LineNumber>10.100</LineNumber>
 </OLDVALUE>
 <NEWVALUE>
  <H_Action>040</H_Action>
  <D_Action>040</D_Action>
  <OrderCompany>00220</OrderCompany>
  <OrderNumber>10004035</OrderNumber>
  <OrderType>SO</OrderType>
  <LineNumber>10.100</LineNumber>
  <LineType>CS</LineType>
  <LoadNumber>8811</LoadNumber>
 </NEWVALUE>
</root>'

select c.value('H_Action[1]','varchar(20)') as H_Action,
c.value('D_Action[1]','varchar(20)') as D_Action,
c.value('OrderCompany[1]','varchar(20)') as OrderCompany,
c.value('OrderNumber[1]','varchar(20)') as OrderNumber,
c.value('OrderType[1]','varchar(20)') as OrderType,
c.value('LineNumber[1]','varchar(20)') as LineNumber
from @XML.nodes('//OLDVALUE') as T(C)


select c.value('H_Action[1]','varchar(20)') as H_Action,
c.value('D_Action[1]','varchar(20)') as  D_Action,
c.value('OrderCompany[1]','varchar(20)') as OrderCompany,
c.value('OrderNumber[1]','varchar(20)') as OrderNumber,
c.value('OrderType[1]','varchar(20)') as OrderType,
c.value('LineNumber[1]','varchar(20)') as LineNumber,
c.value('LineType[1]','varchar(20)') as LineType,
c.value('LoadNumber[1]','varchar(20)') as LoadNumber
from @XML.nodes('//NEWVALUE') as T(C)

 

 

CREATE TABLE [dbo].[T_XML](
 [ID] [int] NULL,
 [DOC] [xml] NULL
)

 


--query
select doc.query('//NEWVALUE') from t_xml
select doc.query('(root/OLDVALUE/H_Action[@id="1130"])') from t_xml
--属性
select doc.value('(
root/OLDVALUE/H_Action/@id)[1]','nvarchar(20)') from t_xml
select doc.value('(root/OLDVALUE/H_Action[@id])[1]','nvarchar(20)') from t_xml
--文本
select doc.value('(root/OLDVALUE/H_Action/text())[1]','nvarchar(20)') from t_xml
select doc.value('(root/OLDVALUE/H_Action[text()])[1]','nvarchar(20)') from t_xml
--exist
SELECT doc.exist('/root/OLDVALUE/H_Action[(text()[1] cast as xs:string ?)= xs:string("030")]') from t_xml
--modify

update t_xml set doc.modify('replace value of (/root/OLDVALUE/H_Action[@id="1130"]/text())[1] with "100"')
--delete
update t_xml set doc.modify('delete /root/OLDVALUE/H_Action[@id="1130"]')
--insert
update t_xml set doc.modify('insert <insert>by xf</insert> before (/root/OLDVALUE/H_Action[@id="1130"])[1]')

--添加属性
update t_xml set doc.modify('insert attribute date{"2008-11-27"} into (/root/OLDVALUE/H_Action[@id="1130"])[1]')
--删除属性
update t_xml set doc.modify('delete /root/OLDVALUE/H_Action[@id="1130"]/@date')
--修改属性
update t_xml set doc.modify('replace value of (/root/OLDVALUE/H_Action[@id="1130"]/@id)[1] with "030"')
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值