ノードの関数 - local-name
適用対象: SQL Server
$argの名前のローカル部分を、長さ 0 の文字列または xs:NCName の字句形式の xs:string として返します。 引数が指定されていない場合、既定値はコンテキスト ノードです。
構文
fn:local-name() as xs:string
fn:local-name($arg as node()?) as xs:string
引数
$arg
ローカル名部分を取得するノード名。
解説
SQL Server では、引数のない fn:local-name() は、コンテキスト依存述語のコンテキストでのみ使用できます。 具体的には、角かっこ (
[ ]
) 内でのみ使用できます。引数が指定され、空のシーケンスである場合、関数は長さ 0 の文字列を返します。
ターゲット ノードがドキュメント ノード、コメント、またはテキスト ノードであるため、名前がない場合、関数は長さ 0 の文字列を返します。
例
このトピックでは、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 テーブルの型指定された xml 列である Instructions 列に対して指定されます。 式 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. 述語で引数を指定せずに local-name を使用する
次のクエリは、ProductModel テーブルの Instructions 列 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
このクエリは、<root
>要素のすべての<Location
>要素の子を返します。