Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra el uso de la directiva HIDE . Esta directiva es útil cuando desea que la consulta devuelva un atributo para ordenar las filas de la tabla universal devuelta por la consulta, pero no desea ese atributo en el documento XML resultante final.
Esta consulta construye este XML:
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<Summary> element from XML stored in CatalogDescription column
</SummaryDescription>
</Summary>
</ProductModel>
Esta consulta genera el XML que desea. La consulta identifica dos grupos de columnas que tienen 1 y 2 como valores de etiqueta en los nombres de columna.
Esta consulta usa el método query() (tipo de datos xml) del tipo de datos xml para consultar la columna CatalogDescription de tipo xml para recuperar la descripción de resumen. La consulta también usa el método value() (tipo de datos xml) del tipo de datos xml para recuperar el valor ProductModelID de la columna CatalogDescription. Este valor no es necesario en el XML resultante, pero es necesario para ordenar el conjunto de filas resultante. Por lo tanto, el nombre de columna, [Summary!2!ProductModelID!HIDE], incluye la directiva HIDE . Si esta columna no se incluye en la instrucción SELECT, tendrá que ordenar el conjunto de filas por [ProductModel!1!ProdModelID] y [Summary!2!SummaryDescription] ese es el tipo xml y no puede usar la columna de tipo xml en ORDER BY. Por lo tanto, se agrega la columna adicional [Summary!2!ProductModelID!HIDE] y, a continuación, se especifica en la cláusula ORDER BY.
USE AdventureWorks2012;
GO
SELECT 1 as Tag,
0 as Parent,
ProductModelID as [ProductModel!1!ProdModelID],
Name as [ProductModel!1!Name],
NULL as [Summary!2!ProductModelID!hide],
NULL as [Summary!2!SummaryDescription]
FROM Production.ProductModel
WHERE CatalogDescription is not null
UNION ALL
SELECT 2 as Tag,
1 as Parent,
ProductModelID,
Name,
CatalogDescription.value('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
(/PD:ProductDescription/@ProductModelID)[1]', 'int'),
CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/pd:ProductDescription/pd:Summary')
FROM Production.ProductModel
WHERE CatalogDescription is not null
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]
FOR XML EXPLICIT
go
El resultado es el siguiente:
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>
</pd:Summary>
</SummaryDescription>
</Summary>
</ProductModel>