基于节点的函数 - local-name
适用范围:SQL Server
以 xs:string 的形式返回$arg名称的本地部分,该字符串将是零长度字符串,或者将具有 xs:NCName 的词法形式。 如果未提供参数,默认值为上下文节点。
语法
fn:local-name() as xs:string
fn:local-name($arg as node()?) as xs:string
参数
$arg
将检索其本地名称部分的节点名称。
注解
在 SQL Server 中, 不带参数的 fn:local-name 只能在 依赖于上下文的谓词的上下文中使用。 特别要指出的是,它只能在方括号 (
[ ]
) 内使用。如果提供了参数而参数是空序列,则该函数返回长度为零的字符串。
如果目标节点没有名称(因为它是文档节点、注释或文本节点),该函数返回长度为零的字符串。
示例
本主题针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供 XQuery 示例。
A. 检索特定节点的本地名称
下面的查询是针对非类型化的 XML 实例指定的。 查询表达式 local-name(/ROOT[1])
检索指定节点的本地名称部分。
declare @x xml
set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('local-name(/ROOT[1])')
-- result = ROOT
以下查询是针对 ProductModel 表的 Instructions 列(一个类型化的 xml 列)指定的。 表达式 local-name(/AWMI:root[1]/AWMI:Location[1])
返回指定节点的本地名称 Location
。
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
local-name(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
-- result = Location
B. 在谓词中使用不带参数的本地名称
以下查询针对 ProductModel 表的“指令”列(类型化 xml 列)指定。 该表达式返回其 QName 的本地名称部分为“Location”的 <root
> 元素的所有元素子元素。 local-name () 函数在谓词中指定,并且它没有参数。上下文节点由函数使用。
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
/AWMI:root//*[local-name() = "Location"]') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
该查询返回元素的所有 <Location
> 元素子 <root
> 元素。