Sql Server 对xml类型的操作

来源:互联网 发布:车管家软件 编辑:程序博客网 时间:2024/05/22 02:14

 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"')