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   

Consulte también

Funciones de XQuery con el tipo de datos xml