Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
Se aplica a:SQL Server
Devuelve el valor con tipo para cada elemento especificado por $arg.
Sintaxis
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argumentos
$arg
Secuencia de elementos cuyos valores con tipo se devuelven.
Comentarios
Las consideraciones siguientes se aplican a los valores con tipo:
El valor con tipo de un valor atómico es el propio valor atómico.
El valor con tipo de un nodo de texto es el valor de cadena del nodo de texto.
El valor con tipo de un comentario es el valor de cadena del comentario.
El valor con tipo de una instrucción de procesamiento es el contenido de la instrucción de procesamiento, sin el nombre de destino de la instrucción de procesamiento.
El valor con tipo de un nodo de documento es su valor de cadena.
Las consideraciones siguientes se aplican a los nodos de atributo y elemento:
Si un nodo de atributo se escribe con un tipo de esquema XML, su valor con tipo será el valor con tipo en consecuencia.
Si el nodo de atributo no está escrito, su valor con tipo es igual a su valor de cadena que se devuelve como una instancia de
xdt:untypedAtomic.Si el nodo de elemento no se ha escrito, su valor con tipo es igual a su valor de cadena que se devuelve como una instancia de
xdt:untypedAtomic.
Las consideraciones siguientes se aplican a los nodos de elemento con tipo:
Si el elemento tiene un tipo de contenido simple,
data()devuelve el valor con tipo del elemento.Si el nodo es de tipo complejo, incluido xs:anyType,
data()devuelve un error estático.
Aunque el uso de la data() función suele ser opcional, como se muestra en los ejemplos siguientes, especificar la función aumenta explícitamente la legibilidad de las data() consultas. Para obtener más información, consulte Conceptos básicos de XQuery.
No se puede especificar data() en XML construido, como se muestra en el ejemplo siguiente:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Ejemplos
En este artículo se proporcionan ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks.
A Uso de la función data() XQuery para extraer el valor con tipo de un nodo
En la consulta siguiente se muestra cómo se usa la data() función para recuperar valores de un atributo, un elemento y un nodo de texto:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query(N'
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"
Feature = "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Este es el resultado:
<Root ProductID="19" Feature="parts and labor"/>
Como se mencionó, la data() función es opcional al construir atributos. Si no especifica la data() función, se supone implícitamente. La siguiente consulta genera los mismos resultados que la consulta anterior:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ ($pd/@ProductModelID)[1] }"
Feature = "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
En los ejemplos siguientes se muestran instancias en las que se requiere la data() función.
En la consulta siguiente, $pd/p1:Specifications/Material devuelve el <Material> elemento . Además, data($pd/p1:Specifications/ Material) devuelve datos de caracteres tipados como xdt:untypedAtomic, porque <Material> no está escrito. Cuando la entrada no está tipada, el resultado de data() se escribe como xdt:untypedAtomic.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $pd in //p1:ProductDescription
return
<Root>
{ $pd/p1:Specifications/Material }
{ data($pd/p1:Specifications/Material) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Este es el resultado:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
En la consulta siguiente, data($pd/p1:Features/wm:Warranty) devuelve un error estático, porque <Warranty> es un elemento de tipo complejo.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Root>
{ /p1:ProductDescription/p1:Features/wm:Warranty }
{ data(/p1:ProductDescription/p1:Features/wm:Warranty) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 23;