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_应用脚本下载