mssql sqlserver xml数据类型简介


摘要:
下文将讲述sql server中的xml数据类型,如下所示:
实验环境:sql server 2008


xml数据类型简介:
xml数据类型在sqlserver中: 可作为列类型 也可以作为变量数据类型

xml数据类型存储数据大小不能超过2GB

xml数据类型应用场景:
xml数据类型应用于存储复杂的多行集数据。
应用于存储表数据,(在主表中存储子表数据)

     ---例:
create table test
(keyId int identity,
info xml)

insert into test
(info)values('< root >< value >maomao365.com< /value >< /root >')
insert into test
(info)values(N'< root >< value >  sql学习博客< /value >< /root >')


declare @xmlInfo xml  --定义xml变量
select @xmlInfo=info  from test --给xml变量赋值 
select *,
@xmlInfo as [赋值变量] 
from test 
 

truncate table test 
drop table test 
 


xml数据类型注意事项:
xml数据类型不能直接使用print输出

示例脚本下载:mssql_7496_xml数据类型_应用脚本下载

mssql sqlserver xml之nodes函数的用法说明


摘要:
下文讲述xml函数nodes的用法及说明
实验环境:sql server 2008



nodes()功能及语法说明

nodes函数的功能:
nodes函数返回指定xml结构中的行集,通过nodes函数可以将xml字符串转换为相应的表信息,便于更深入的获取xml的信息,
nodes函数返回的行集中为xml子集,我们可以通过query或value对子集进行操作获取子集中的属性或值,生成相应的数据表。
nodes函数的语法:
nodes(XQuery) as Table(Column)
参数XQuery:
一个字符串形式的xml表达式。
Table:
表别名-自定义
column:
返回行集的列名-自定义
nodes函数的返回值:
xml子集,
返回值数据类型为xml



nodes()应用举例

      
 /*
 例:使用nodes函数将以下xml字符串
 拆分为:
  包含列名sortName,sortInfo的数据表
  -----------
  nodes函数返回 表 a 和列d
  列b为一个xml子集如 t3所示
  sortName通过对列d执行xml value函数提取相关数据
 */
 
 declare @xmlInfo xml 
 set @xmlInfo ='
 < root >
 < userDefine keyId="1" >
  < sort >
    < sortName >博客< /sortName >
    < sortInfo >sql教程博客< /sortInfo >
  < /sort >
< /userDefine >
< userDefine keyId="2">
  < sort>
    < sortName >网站< /sortName >
    < sortInfo >www.maomao365.com< /sortInfo >
  < /sort >
< /userDefine >
< /root >'


select 
d.value('(./sortName)[1]','nvarchar(30)') as sortName,
   d.value('(./sortInfo)[1]','nvarchar(30)') as sortInfo,
d.query('./sortName[text()]') as t1,
   d.query('/sortInfo') as t2,
   d.query('.') as t3
 from @xmlInfo.nodes('/root/userDefine/sort')  as a(d)

mssql_sqlserver_xml_nodes应用举例

mssql_sqlserver_xml_nodes应用举例


示例脚本下载:
mssql_7491_xml_nodes_应用脚本下载
相关阅读:
openxml
mssql openxml函数用法

mssql sqlserver xml之exist函数使用说明


摘要:
下文讲述xml之exist函数的语法及用法说明,如下所示
实验环境:sql server 2008 R2



xml之exist函数简介

exist函数功能说明:
exist函数主要用于检测xml数据中是否存在指定节点。
exist函数语法说明:
exist(XQuery)
参数说明(XQuery):
XQuery为一个xml表达式,是一个字符串类型

返回值说明:
返回1(true):代表xml数据中至少存在一个XQuery表达式中的内容
返回0(false):代表xml数据中不存在一个XQuery表达式中的内容



xml之exists函数应用举例

   /* 
示例1:
下文分享使用exist函数获取是否存在属性 keyId中的值为889 
 及是否存在属性@keyId,----------注意节点表达式的属性 
 -------------------------------------------------
 cast as xs:int? 表示将值强制转换为int,同eq后面的889进行比较
 eq代表相等比较
*/
declare @xmlInfo xml;    
set   @xmlInfo = '< root keyId = "889" / >';  
select  @xmlInfo.exist('/root[(@keyId cast as xs:int?) eq xs:int("889")]') as [1],  
  @xmlInfo.exist('/root/@keyId') as [2];  
go
/*
示例2:
  2.1检测xml中的文本和指定值进行比较
  2.2检测xml中是否存在文本值
------------------------------------
text()标识返回文本值
*/
DECLARE @xmlInfo xml;  
SET @xmlInfo = '< root >< keyId >889< /keyId >< /root >';  
select  @xmlInfo.exist('/root/keyId[(text()[1] cast as xs:int ?) = xs:int("889") ]') as [对比1],
  @xmlInfo.exist('/root/keyId') as [存在值2] 
go

/*
示例3:
  对xml字符串检测指定属性值是否存在
  检测xml字符串中keyId下是否存在属性type='maomao365.com',
  如果存在,则返回1,反之返回0
*/


DECLARE @xmlInfo xml;  
SET @xmlInfo = '< root >< keyId type="maomao365.com" >889< /keyId >< /root >';  
select @xmlInfo.exist('/root/keyId[@type="a"]')  as [1],
@xmlInfo.exist('/root/keyId[@type="maomao365.com"]')  as [2] 

go

示例脚本下载:mssql_7487_xml_exist_应用脚本下载