Funciones del descriptor de acceso a datos: string (XQuery)
Se aplica a:SQL Server
Devuelve el valor de $arg representado como una cadena.
Sintaxis
fn:string() as xs:string
fn:string($arg as item()?) as xs:string
Argumentos
$arg
Es un nodo o un valor atómico.
Comentarios
Si $arg es la secuencia vacía, se devuelve la cadena de longitud cero.
Si $arg es un nodo, la función devuelve el valor de cadena del nodo que se obtiene mediante el descriptor de acceso string-value. Esto está definido en la especificación del modelo de datos de W3C XQuery 1.0 y XPath 2.0.
Si $arg es un valor atómico, la función devuelve la misma cadena que devuelve la expresión cast como xs:string, $arg, excepto cuando se indique lo contrario.
Si el tipo de $arg es xs:anyURI, el URI se convierte en una cadena sin caracteres especiales de escape.
En esta implementación, fn:string() sin un argumento solo se puede usar en el contexto de un predicado dependiente del contexto. En concreto, solo se puede utilizar entre corchetes ([ ]).
Ejemplos
En este tema se proporcionan ejemplos de XQuery en instancias XML que se almacenan en varias columnas de tipo xml en la base de datos AdventureWorks.
A. Usar la función string
La consulta siguiente recupera el <Features
> nodo de elemento secundario del <ProductDescription
> elemento .
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Features
')
FROM Production.ProductModel
WHERE ProductModelID=19
Éste es el resultado parcial:
<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
These are the product highlights.
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
...
</PD:Features>
Si especifica la función string(), recibirá el valor de cadena del nodo especificado.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
string(/PD:ProductDescription[1]/PD:Features[1])
')
FROM Production.ProductModel
WHERE ProductModelID=19
El resultado parcial es el siguiente.
These are the product highlights.
3 yearsparts and labor...
B. Usar la función string en varios nodos
En el ejemplo siguiente, se asigna una instancia XML a una variable de tipo xml. Las consultas se especifican para ilustrar el resultado de aplicar string() a varios nodos.
declare @x xml
set @x = '<?xml version="1.0" encoding="UTF-8" ?>
<!-- This is a comment -->
<root>
<a>10</a>
just text
<b attr="x">20</b>
</root>
'
La consulta siguiente recupera el valor de cadena del nodo de documento. Este valor se forma concatenando el valor de cadena de todos sus nodos de texto descendientes.
select @x.query('string(/)')
El resultado es el siguiente:
This is a comment 10
just text
20
La consulta siguiente intenta recuperar el valor de cadena de un nodo de instrucción de procesamiento. El resultado es una secuencia vacía, porque no contiene un nodo de texto.
select @x.query('string(/processing-instruction()[1])')
La consulta siguiente recupera el valor de cadena del nodo de comentario y devuelve el nodo de texto.
select @x.query('string(/comment()[1])')
El resultado es el siguiente:
This is a comment